Pointeur ne fonctionnera pas en printf()
Avoir un problème avec l'impression d'un pointeur. Chaque fois que j'essaie et compiler le programme ci-dessous, j'obtiens l'erreur suivante:
pointers.c:11: warning: format ‘%p’ expects type ‘void *’, but argument 2 has type ‘int *’
il est évident que je manque quelque chose de simple ici, mais d'autres exemples de code similaire que j'ai vu, cela devrait fonctionner.
Voici le code, toute aide serait super!
#include <stdio.h>
int main(void)
{
int x = 99;
int *pt1;
pt1 = &x;
printf("Value at p1: %dn", *pt1);
printf("Address of p1: %pn", pt1);
return 0;
}
4 réponses
il suffit de lancer votre pointeur int sur un nul:
printf( "Address of p1: %p\n", ( void * )pt1 );
Votre code est sûr, mais vous compilez avec l' -Wformat
drapeau d'avertissement, qui Tapera vérifier les appels à printf()
et scanf()
.
notez que vous recevez un simple avertissement. Votre code sera probablement exécuter comme prévu.
"%p"
le spécificateur de conversion en printf attend un void*
argument; pt1
est de type int*
.
l'avertissement est bon parce que int*
et void*
may, sur les implémentations étranges, ont des tailles différentes ou des motifs de bits ou quelque chose.
convertissez le int*
void*
avec un casting ...
printf("%p\n", (void*)pt1);
... et tout ira bien, même sur des implémentations étranges.
dans ce cas, le compilateur est un peu trop lent avec les Avertissements. Votre code est parfaitement sûr, vous pouvez éventuellement supprimer l'avertissement avec:
printf("Address of p1: %p\n", (void *) pt1);
Le message dit tout, mais c'est juste un avertissement, pas une erreur en soi:
printf("Address of p1: %p\n", (void*)pt1);