J'ai quelques doutes sur le déréférencement des pointeurs C. Vu le code suivant:Déréférencement avec (vide *) devant
void *vptr; // declare as a void pointer type
int val = 1;
int *iptr;
// void type can hold any pointer type or reference
iptr = &val;
vptr = iptr;
printf("iptr=%p, vptr=%p\n", (void *)iptr, (void *)vptr);
Lorsque nous (void *)iptr
, qu'est-ce que nous imprimons en fait? Je pensais que lors de la déréférencement, il devrait imprimer le numéro 1, mais il imprime une adresse. Pourquoi donc? Et pourquoi est-il nécessaire d'ajouter (void *)
devant afin d'imprimer l'adresse? Est-ce que iptr
ne suffirait pas?
Merci
Merci pour la réponse. J'ai encore le doute quand nous jetons avec (vide *) quelle valeur obtenons-nous? –
@HommerSmith J'ai écrit qu'il imprime la valeur du pointeur d'une manière définie par l'implémentation car le standard C l'a spécifié de cette façon pour le spécificateur 'p'. Cela laisse par exemple le choix pour un compilateur d'imprimer un pointeur nul comme '(nil)' ou '0x0'. Habituellement, il imprime une adresse mémoire hexadécimale. Notez que la valeur de '(void *) iptr' est la même que la valeur de' iptr' sauf que le type est différent. – ouah