递归指针

我正在和一个刚接触过低级语言的人和今天的手动内存管理人员交谈,并尽力解释指针。

然后他想出了:

#include  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应该!=&vp。 我很惭愧地说我不知道​​这里发生了什么……所以,这里发生了什么?

在代码中有这一行

  vp = &vp; 

vp == &vp就不足为奇了……

在第一次迭代中,它就像你(和他)所期望的那样。

此代码运行后:

 vp = &vp; 

指针变量现在确实存储了自身的地址。 请注意,这只发生在初始循环迭代之后 – 第一行输出

 vp: 0xbfd29bf8, &vp: 0xbfd29bf4 

和值不一样,因为上面的分配还没有完成。

这对他来说没有意义,因为vp应该!=&vp。

在完成任务后,为什么不应该这样做?

如果有帮助,请尝试将每个变量视为占用内存中的编号位置,并将指针视为保存其中一个编号的内存位置。 为什么void指针不能存储恰好识别自己位置的值?