递归指针

时间:2012-01-20 10:53:21

标签: c pointers

我正在与一位不熟悉低级语言和手动内存管理的人交谈,并尽力解释指针。

然后他想出了:

#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。我很惭愧地说我不知道​​这里发生了什么......那么,这里发生了什么?

3 个答案:

答案 0 :(得分:7)

当你在代码中有这一行时

    vp = &vp;

vp == &vp ...

并不奇怪

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

答案 1 :(得分:1)

此代码运行后:

vp = &vp;
指针变量现在确实存储了自身的地址。请注意,这仅在初始循环迭代后发生 - 第一行输出为

vp: 0xbfd29bf8, &vp: 0xbfd29bf4

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

答案 2 :(得分:1)

  

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

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

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