Come stampare gli indirizzi variabili in C?

Quando eseguo questo codice.

#include  void moo(int a, int *b); int main() { int x; int *y; x = 1; y = &x; printf("Address of x = %d, value of x = %d\n", &x, x); printf("Address of y = &d, value of y = %d, value of *y = %d\n", &y, y, *y); moo(9, y); } void moo(int a, int *b) { printf("Address of a = %d, value of a = %d\n", &a, a); printf("Address of b = %d, value of b = %d, value of *b = %d\n", &b, b, *b); } 

Continuo a ricevere questo errore nel mio compilatore.

 /Volumes/MY USB/C Programming/Practice/addresses.c:16: warning: format '%d' expects type 'int', but argument 2 has type 'int *' /Volumes/MY USB/C Programming/Practice/addresses.c:17: warning: format '%d' expects type 'int', but argument 2 has type 'int **' /Volumes/MY USB/C Programming/Practice/addresses.c:17: warning: format '%d' expects type 'int', but argument 3 has type 'int *' /Volumes/MY USB/C Programming/Practice/addresses.c: In function 'moo': /Volumes/MY USB/C Programming/Practice/addresses.c:23: warning: format '%d' expects type 'int', but argument 2 has type 'int *' /Volumes/MY USB/C Programming/Practice/addresses.c:24: warning: format '%d' expects type 'int', but argument 2 has type 'int **' /Volumes/MY USB/C Programming/Practice/addresses.c:24: warning: format '%d' expects type 'int', but argument 3 has type 'int *' 

Potresti aiutarmi?

Grazie

blargman

Si desidera utilizzare %p per stampare un puntatore. Dalla specifica:

p L’argomento deve essere un puntatore a void . Il valore del puntatore viene convertito in una sequenza di caratteri di stampa, in un modo definito dall’implementazione.

E non dimenticare il cast, ad es

 printf("%p\n",(void*)&a); 

Quando si intende stampare l’indirizzo di memoria di qualsiasi variabile o puntatore, l’utilizzo di %d non comporterà il lavoro e causerà alcuni errori di compilazione, poiché si sta tentando di stampare un numero anziché un indirizzo e anche se esso funziona, avresti un errore intenzionale, perché un indirizzo di memoria non è un numero. il valore 0xbfc0d878 è sicuramente un numero, ma un indirizzo.

Quello che dovresti usare è %p . per esempio,

 #include int main(void) { int a; a = 5; printf("The memory address of a is: %p\n", (void*) &a); return 0; } 

In bocca al lupo!

Sembra che tu usi% p: Stampa puntatori

Per stampare l’indirizzo di una variabile, è necessario utilizzare il formato %p . %d è per interi con segno. Per esempio:

 #include void main(void) { int a; printf("Address is %p:",&a); }