我正在与一位不熟悉低级语言和手动内存管理的人交谈,并尽力解释指针。
然后他想出了:#include <stdio.h>
int main()
{
int v = 0;
void* vp = &v;
int i = 0;
for(; i < 10; ++i)
{
printf("vp: %p, &vp: %p\n", vp, &vp);
vp = &vp;
}
}
这个输出是:
vp: 0xbfd29bf8, &vp: 0xbfd29bf4
vp: 0xbfd29bf4, &vp: 0xbfd29bf4
vp: 0xbfd29bf4, &vp: 0xbfd29bf4
vp: 0xbfd29bf4, &vp: 0xbfd29bf4
vp: 0xbfd29bf4, &vp: 0xbfd29bf4
vp: 0xbfd29bf4, &vp: 0xbfd29bf4
vp: 0xbfd29bf4, &vp: 0xbfd29bf4
vp: 0xbfd29bf4, &vp: 0xbfd29bf4
vp: 0xbfd29bf4, &vp: 0xbfd29bf4
vp: 0xbfd29bf4, &vp: 0xbfd29bf4
这对他来说没有意义,因为vp应该!=&amp; vp。我很惭愧地说我不知道这里发生了什么......那么,这里发生了什么?
答案 0 :(得分:7)
当你在代码中有这一行时
vp = &vp;
vp == &vp
...
在第一次迭代中,它就像你(和他)所期望的一样。
答案 1 :(得分:1)
此代码运行后:
vp = &vp;
指针变量现在确实存储了自身的地址。请注意,这仅在初始循环迭代后发生 - 第一行输出为
vp: 0xbfd29bf8, &vp: 0xbfd29bf4
和值不一样,因为上面的分配还没有完成。
答案 2 :(得分:1)
这对他来说没有意义,因为vp应该!=&amp; vp。
在你完成任务后,为什么不应该这样做?
如果有帮助,请尝试将每个变量视为占用内存中的编号位置,并将指针视为保存其中一个编号的内存位置。为什么void指针不能存储恰好识别自己位置的值?