gpt4 book ai didi

c - 具有递增和递减运算符的指针

转载 作者:太空狗 更新时间:2023-10-29 16:00:13 24 4
gpt4 key购买 nike

一般来说,当赋值运算符存在时,左操作数应该是一个变量而不是一个表达式,但是当我使用指针在左侧创建一个表达式时,代码不会产生任何错误。

Jdoodle在线编译器/C

它应该抛出一个错误,但是编译成功。

https://www.jdoodle.com/c-online-compiler

#include <stdio.h>

int main()
{
int x = 30, *y, *z;

y = &x; // Assume address of x is 1000 and integer is 4 byte size */
z = y;
*y++ = *z++;
x++;
return 0;
}

最佳答案

赋值的左操作数不一定是变量。例如,以下作业应该并且确实可以很好地工作(我假设您知道这一点只是说错了):

array[index] = value;
*ptr = value;

我认为让您对 *y++ = *z++; 感到困惑的是您认为它正在分配给增量操作的结果,这确实没有意义。但这不是该表达式的优先级:*y++ 等同于 *(y++),而不是 (*y)++。因此,您正在取消引用 y++ 的结果,然后为该取消引用的内存位置分配一个值,就好像您已编写:

int *ptr = y++;
*ptr = *z++;

关于c - 具有递增和递减运算符的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56163742/

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