【发布时间】:2022-01-01 20:11:19
【问题描述】:
int main()
{
int *p;
printf("%p \n", &p);
printf("%p \n", p);
return 0;
}
通过执行此代码,我收到以下输出:
0x16b77f710
0x104683f4c
我希望得到相同的内存地址,因为&p id 没有引用到任何其他变量。
为什么我得到两个不同的内存地址?
谢谢,
【问题讨论】:
-
因为 p 不指向自己。
-
int *p;不会初始化p,所以printf("%p \n", p);会打印一些随机垃圾值 -
您需要
void *p = &p;才能获得相同的输出。 -
程序尝试使用未初始化的变量。这具有未定义的行为。输出可以是任何东西。 “因为 &p id 没有引用任何其他变量”是不合理的。
标签: c pointers memory-address ansi-c