c - C中的后增量和前增量

标签 c post-increment pre-increment operator-precedence

我对这两个 C 语句有疑问:

  1. x = y++;

  2. t = *ptr++;

在语句 1 中,y 的初始值被复制到 x 中,然后 y 递增。

在语句 2 中,我们查看 *ptr 指向的值,将其放入变量 t,然后稍后递增 ptr。

对于语句 1,后缀自增运算符的优先级高于赋值运算符。那么是不是应该先把y递增,然后把x赋值给y的递增值?

我不理解这些情况下的运算符优先级。

最佳答案

您误解了 2] 的含义。后增量总是产生增量之前的值,然后在之后的某个时间递增该值。

因此,t = *ptr++ 本质上等同于:

t = *ptr;
ptr = ptr + 1;

这同样适用于您的 1] - 从 y++ 产生的值是 y 在增量之前的值。优先级不会改变这一点——无论表达式中其他运算符的优先级高多少或低多少,它产生的值将始终是增量之前的值,增量将在之后的某个时间完成。

关于c - C中的后增量和前增量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10764180/

相关文章:

C++ 后递增 : objects vs primitive types

c++ - 前增量和后增量

c - 为什么需要左值作为增量操作数?

具有运算符关联性和优先级的 C 函数求值顺序

c - TCC -c 选项错误

c - 合并二维 bool 数组 C

arrays - C 中二维数组的递增

c++ - 如何将窗口的一部分绘制到内存设备上下文中?

java - x=20;x=++x+++x + x++ ;java中x的最终值为65

c# - arr[0]++ 和++arr[0] 的区别