我是新学习C,现在学习指针,我从这个网站学习,但这段代码给我一个错误:pointer.c:在函数'main'中: pointer.c:6:5:警告:格式'%d'需要类型为'int'的参数,但参数2的类型为'int *'[-Wformat =] printf(“地址:%d”,& var); //注意,变量前的&符号(&)
我用以下代码编译它:gcc -o pointer pointer.c
/* Example to demonstrate use of reference operator in C programming. */
#include <stdio.h>
int main(){
int var = 5;
printf("Value: %d\n",var);
printf("Address: %d",&var); //Notice, the ampersand(&) before var.
return 0;
}
答案 0 :(得分:2)
您正在尝试打印var
的地址,就好像它是一个有符号整数,它不是。它是一个指针,可能与整数的大小不同。
将不匹配类型的值传递给printf()
会调用未定义的行为,这就是编译器发出友好警告的原因。
您应该使用%p
对其进行格式化,并将值转换为(void *)
以符合C标准:
printf("Address: %p\n", (void *) &var);
答案 1 :(得分:2)
请为每种数据类型使用正确的format specifiers。地址由%p。
指定答案 2 :(得分:1)
最好使用%p打印指针。从规范:
p参数应该是指向void的指针。指针的值是 转换为一系列打印字符,在 实现定义的方式。
不要忘记演员:printf("Address: %p\n",(void*)&var);