我正在和一个刚接触过低级语言的人和今天的手动内存管理人员交谈,并尽力解释指针.
然后他想出了:
#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;
}
}
Run Code Online (Sandbox Code Playgroud)
这个输出是:
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
Run Code Online (Sandbox Code Playgroud)
这对他来说没有意义,因为vp应该!=&vp.我很惭愧地说我不知道这里发生了什么......那么,这里发生了什么?
当你在代码中有这一行
vp = &vp;
Run Code Online (Sandbox Code Playgroud)
毫不奇怪vp == &vp......
在第一次迭代中,它就像你(和他)所期望的那样.