指针分配和增量如何在下面的示例中工作

Jag*_*edi 5 c pointers

我正在学习C中的指针.我对下面的程序如何工作感到困惑

int main()
{
    int x=30, *y, *z;
    y=&x; 
    z=y;
    *y++=*z++;
    x++;
    printf("x=%d, y=%p, z=%p\n", x, y, z);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是

x=31, y=0x7ffd6c3e1e70, z=0x7ffd6c3e1e70
Run Code Online (Sandbox Code Playgroud)

yz指向变量的下一个整数地址x.我无法理解这条线是如何工作的

*y++=*z++;
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下C如何理解这一行吗?

cok*_*ken 5

*y++=*z++; 实际上是指

*y = *z;
y += 1*(sizeof(int)); //because int pointers are incremented by 4bytes each time
z += 1*(sizeof(int)); //because int pointers are incremented by 4bytes each time
Run Code Online (Sandbox Code Playgroud)

所以指向值不受影响,指针加一。

  • 除了子操作的顺序不是预定的。 (3认同)