C中的双指针

Kun*_*asu -2 c c++ pointers double-pointer

有人请详细说明这里有什么好玩的吗?

int main()
{
    int **p = 0;
//p=?  and why| *p=?  and why|**p=? and why

    ++p;
//p=?  and why| *p=?  and why|**p=? and why

    printf("%d\n", p);
return 1;
}
Run Code Online (Sandbox Code Playgroud)

输出: -

  • 4(为什么?)

Sim*_*mon 7

首先,p是一个指向整数指针的指针.

int **p = 0;

p= 0,*p=无,**p=少于零.

++p;

与p = p + 1相同.表示指向指针的指针大小.指针基本上是,至少在你的操作系统上,32位长度(4字节).p现在0点后4个字节的值p4.


Oli*_*rth 6

p是指向指针的指针int.它被初始化为0,即它是一个空指针.

然后将其递增以指向下一个连续指向int内存的指针.* 下一个指针将位于地址4,因为在您的平台上,指针的大小为4个字节.

然后printf将指针值解释为整数,因此显示"4".

*但请注意,这是现在未定义的行为.