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

时间:2016-12-02 10:56:46

标签: 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;
}

输出

x=31, y=0x7ffd6c3e1e70, z=0x7ffd6c3e1e70

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

*y++=*z++;

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

1 个答案:

答案 0 :(得分:4)

*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

如此指向的值不受影响,指针会增加一个。