Est-ce que typecast est requirejs dans malloc?

Quelle est l’utilisation de typecast dans Malloc? Si je n’écris pas le transtypage dans malloc, que retournera-t-il? (Pourquoi est-il nécessaire de transtypage en malloc?)

Je suppose que vous voulez dire quelque chose comme ça:

int *iptr = (int*)malloc(/* something */);

Et en C, vous n’avez pas à (et ne devriez pas) lancer le pointeur de retour de malloc . C’est un void * et en C, il est implicitement converti en un autre type de pointeur.

int *iptr = malloc(/* something */);

Est la forme préférée.

Ceci ne s’applique pas à C ++, qui ne partage pas le même comportement de diffusion implicite void * .

Vous ne devriez jamais atsortingbuer la valeur de retour de malloc() , en C.

  • Inutile, puisque void * est compatible avec tout autre type de pointeur (à l’exception des pointeurs de fonction, mais cela ne s’applique pas ici).
  • Potentiellement dangereux, car il peut masquer une erreur (déclaration manquante de la fonction).
  • Encombrement, les conversions sont longues et souvent difficiles à lire, ce qui rend le code encore plus laid.

Donc: il n’y a pas d’avantages, au moins trois inconvénients, et il faut donc l’éviter.

Vous n’êtes pas obligé de lancer la valeur de retour de malloc . Ceci est discuté plus en détail dans la FAQ C: http://c-faq.com/malloc/cast.html et http://c-faq.com/malloc/mallocnocast.html .

Tout simplement parce que malloc renvoie un void * et que void* n’a pas de taille définie, vous ne pouvez pas lui appliquer de point d’arithmétique. Donc, généralement, vous pointez le pointeur sur le type de données indiqué par votre bloc de mémoire alloué.

Les réponses sont correctes, j’ai juste un conseil:

  • ne jouez pas avec les pointeurs – ce que malloc () renvoie – trop, lancez-les dans un type spécifié dès que possible;
  • si vous devez faire des calculs avec eux, convertissez-les en char *, ptr ++ signifiera donc ce que vous exceptez: ajoutez-y 1 (la taille du type de données sera ajoutée, ce qui correspond à 1 pour char).