这个问题在这里已有答案:
我现在正在学习C和学习指针,我从这个网站学习,但是这段代码给了我一个错误:pointer.c:在函数'main'中:pointer.c:6:5:警告:格式'% d'期望类型'int'的参数,但参数2的类型为'int *'[ - Wformat =] printf(“Address:%d”,&var); //注意,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;
}
3 回答
您正在尝试打印
var
的地址,就好像它是一个有符号整数,它不是一个指针,并且可能有一个不同于整数的大小 .将不匹配类型的值传递给
printf()
会调用未定义的行为,这就是编译器发出友好警告的原因 .您应该使用
%p
对其进行格式化,并将值转换为(void *)
以符合C标准:请为每种数据类型使用正确的format specifiers . 地址由%p指定 .
如果使用%p打印指针,效果会更好 . 从规格:
别忘了演员:
printf("Address: %p\n",(void*)&var);