问题
When i run this code.
#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);
}
I keep getting this error in my 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 *’
Could you help me?
Thanks
blargman
回答1:
You want to use %p to print a pointer. From the spec:
pThe argument shall be a pointer tovoid. The value of the pointer is converted to a sequence of printing characters, in an implementation-defined manner.
And don't forget the cast, e.g.
printf("%p\n",(void*)&a);
回答2:
When you intend to print the memory address of any variable or a pointer, using %d won't do the job and will cause some compilation errors, because you're trying to print out a number instead of an address, and even if it does work, you'd have an intent error, because a memory address is not a number. the value 0xbfc0d878 is surely not a number, but an address.
What you should use is %p. e.g.,
#include<stdio.h>
int main(void) {
int a;
a = 5;
printf("The memory address of a is: %p\n", (void*) &a);
return 0;
}
Good luck!
回答3:
To print the address of a variable, you need to use the %p format. %d is for signed integers. For example:
#include<stdio.h>
void main(void)
{
int a;
printf("Address is %p:",&a);
}
回答4:
Looks like you use %p: Print Pointers
来源:https://stackoverflow.com/questions/5286451/how-to-print-variable-addresses-in-c