Wenn ich diesen Code laufen lasse.
#include <stdio.h>
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);
}
Ich erhalte diesen Fehler immer wieder in meinem Compiler.
/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 *’
Kannst du mir helfen?
Vielen Dank
blargman
Sie möchten %p
verwenden, um einen Zeiger zu drucken. Aus der Spezifikation:
p
Das Argument soll ein Zeiger aufvoid
sein. Der Wert des Zeigers wird auf implementierungsdefinierte Weise in eine Folge von Druckzeichen konvertiert.
Und vergessen Sie nicht die Besetzung, z.
printf("%p\n",(void*)&a);
Wenn Sie beabsichtigen, die Speicheradresse einer Variablen oder eines Zeigers auszudrucken, wird die Verwendung von %d
nicht ausgeführt und führt zu Kompilierungsfehlern, da Sie versuchen, anstelle der Adresse eine Zahl zu drucken Wenn Sie arbeiten, hätten Sie einen absichtlichen Fehler, weil eine Speicheradresse keine Zahl ist. Der Wert 0xbfc0d878
ist sicherlich keine Zahl, sondern eine Adresse.
Was Sie verwenden sollten, ist %p
. z.B.,
#include<stdio.h>
int main(void) {
int a;
a = 5;
printf("The memory address of a is: %p\n", (void*) &a);
return 0;
}
Viel Glück!
Um die Adresse einer Variablen zu drucken, müssen Sie das %p
-Format verwenden. %d
ist für vorzeichenbehaftete Ganzzahlen. Zum Beispiel:
#include<stdio.h>
void main(void)
{
int a;
printf("Address is %p:",&a);
}
Sieht aus wie% p: Zeiger drucken