#include <stdio.h>
int main()
{
int i;
int buf[10];
char *p ;
p = 4;
printf("%d",p);
return 0;
}
输出:
4
怎么会是4?我期待一些地址价值。能帮助我理解吗?
答案 0 :(得分:5)
这是未定义的行为,因为%d
需要一个整数。
你看到这个输出的原因是指针有足够的容量来存储小整数,例如4.如果巧合,系统上的指针大小与整数的大小相匹配,printf
会找到一个它期望在它所期望的位置的表示,因此它将打印指针的数值。
打印指针的正确方法是使用%p
格式说明符和强制转换:
printf("%p", (void*)p);
我期待一些地址价值。
如果您已为p
分配了某个地址,则会获得地址值。例如,如果你这样做
char buf[10];
char *p = &buf[3];
printf("%p", (void*)p);
你会在索引3看到buf
元素的地址。