gpt4 book ai didi

c - 如何跨越指针?

转载 作者:太空宇宙 更新时间:2023-11-04 00:51:02 25 4
gpt4 key购买 nike

这是我无法理解的一小段代码

int x=30, *y, *z;
y=&x;
z=y;
//y++ = z++;
//*y++ = *z++;
x++;
printf("x=%p, y=%p, z=%p y=%p\n ", &x, y,z,y++);
return 0;

这些疑惑一直困扰着我:
为什么 (z++ = y++;) 无效赋值而 (z = y) 有效。这个赋值 (*y++ = *z++) 是什么意思?

此外,如果我运行这个程序,我会得到以下输出:

x = 0028FF04 , y = 0028FF08 , z = 0028FF04 y = 0028FF04
而我的期望是
x = 0028FF04 , y = 0028FF04 , z = 0028FF04 y = 0028FF08

最佳答案

在赋值中,有左边也有右边。左侧必须是所谓的lvalue(l 代表左侧),这实质上意味着它必须是一个变量,而不是计算结果或文字。您可以分配 x = 5 + 2,但不能分配 5 + 2 = x

您不能分配 z++ = y++ 因为 z++ 不是左值。它是一个表达式,其结果是递增前 z 的值。它不是对变量 z 或类似变量的引用。

但是,您可以分配*z++ = *y++,因为这里您处理的是指针。基本上左侧(右侧无关紧要,这里只有左值限制很重要)意味着:递增 z,在递增之前获取它的值并取消引用它(因此 z 的值应该是一个地址,它完全是)。这给了你一个有效的左值。

关于c - 如何跨越指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18679083/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com