2017-09-26 9 views
-2

Quand est-il approprié d'utiliserVoid * lors de l'attribution

void* space_to_use = malloc(size); 
+2

Impossible de copier-coller tout le livre C. Obtenez n'importe quel livre, la réponse est d'abord 10 pages. –

+3

peut être tout ce que vous voulez –

+0

Il est difficile de déduire le but de l'utilisation de morceaux de mémoire de cette pièce de code. Peut-être n'est-il pas destiné à un usage spécifique. – BLUEPIXY

Répondre

-1
void* space_to_use = malloc(size); 
// malloc always return void pointer that means it can be typecast to any type. 
// before using void pointer it is necessary to typecast it into proper type. 
// for example:- 
// if size is 8 byte.It will allocate 8 byte of memory. 
/* 
void* space_to_use = malloc(size); 
char * ptr = (char*)space_to_use; 
*/ 
// These two line can be combine in one statement. 

char * ptr = (char*)malloc(size*sizeeof(char)); 
// NOTE:sizeof(char) is to make sure platform independent. 

// Same for int if we want to store some integer. 
int * ptr = (int*)malloc(size*sizeeof(int)); 
+2

Juste pour information: 'sizeof char' est défini pour toujours être' 1', donc il n'y a jamais besoin de muliply. Cependant, la définition 'CHAR_BIT' peut être différente. –

+0

Voir également [Dois-je diffuser le résultat de malloc?] (Https://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc) –

+0

Oui, ce sera toujours un octet, mais ce sera générique pour integer pour integer * ou structure varaibe ou pointer.Nous devons ajouter sizeof (int) ou sizeof (int *) ou sizeof (strcuct abcd) donc si nous mentionnons sizeof (char) cela ne nuira à rien. – Rohit