Étant nouveau dans C, le seul usage pratique que j'ai obtenu des pointeurs vides est pour des fonctions polyvalentes qui peuvent stocker différents types de données dans un pointeur donné. Par conséquent, je n'ai pas transtypé mon pointeur lors de l'allocation de mémoire.
J'ai vu quelques exemples de code qui utilisent parfois des pointeurs void, mais ils sont transtypés. Pourquoi est-ce utile? Pourquoi ne pas créer directement le type de pointeur souhaité au lieu d'un vide?
Il existe deux raisons pour convertir un pointeur vide en un autre type en C.
*(int*)p = 42
)La raison de 1 devrait être évidente. Le deuxième est que C++ interdit la conversion implicite de void*
à d'autres types, tandis que C le permet.
Vous devez convertir des pointeurs void vers autre chose si vous voulez les déréférencer, par exemple vous obtenez un pointeur void comme paramètre de fonction et vous savez avec certitude qu'il s'agit d'un entier:
void some_function(void * some_param) {
int some_value = *some_param; /* won't work, you can't dereference a void pointer */
}
void some_function(void * some_param) {
int some_value = *((int *) some_param); /* ok */
}