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