Pointeur ne fonctionnera pas dans printf()
Avoir un problème avec l'impression d'un pointeur en dehors. 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 *’
Je suis évidemment manquant quelque chose de simple ici, mais d'autres examles 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: %d\n", *pt1);
printf("Address of p1: %p\n", pt1);
return 0;
}
- L'avertissement description semble bien pour moi. Il la jeta à vide avant de l'envoyer à printf. au lieu de pt1, (void*)pt1
- Essayez d'ajouter une esperluette à pt1 et voir si cela fonctionne.
Vous devez vous connecter pour publier un commentaire.
Tout simplement jeté votre int pointeur vers un vide:
Votre code est sûr, mais vous compilez avec l'
-Wformat
indicateur d'avertissement, qui sera de type vérifier les appels àprintf()
etscanf()
.Notez que vous obtenez un simple avertissement. Votre code probablement exécuter comme prévu.
La
"%p"
indicateur de conversion à printf attend unvoid*
argument;pt1
est de typeint*
.L'avertissement est bien parce que
int*
etvoid*
peut, sur d'étranges mises en œuvre, les différentes tailles ou modèles de bits ou quelque chose.Convertir le
int*
à unvoid*
avec un casting ...... et tout sera bon, même sur d'étranges mises en œuvre.
Dans ce cas, le compilateur est juste un peu tend avec les mises en garde. Votre code est parfaitement sûr, vous pouvez également supprimer le message d'avertissement avec:
Le message dit tout, mais c'est juste un avertissement, pas une erreur en soi:
Cela a très bien fonctionné pour moi:
Vous n'avez pas besoin de le lancer en tant que quoi que ce soit, à moins que vous vouliez...