关于增量运算符的优先级

时间:2019-10-17 09:06:15

标签: c operators

据我所知

int i = 10;
int j = 5;
j += ++i; //j = 16, i = 11 (first i increments and then adds to j)

还有

int i = 10;
int j = 5;
j += i++; //j = 15, i = 11 (first i adds to j and then increments)

在表5-4中的C in a nutshell(运算符优先级和关联性)中,它表示后缀运算符++优先于一元运算符++,我不理解,因为相反的是我以前写过。

The table

那是为什么?

1 个答案:

答案 0 :(得分:0)

运算符的优先级/关联性仅说明C代码应被解析的顺序。这与代码的执行方式无关[sup> 1)。

这意味着如果您有类似*p++的内容,则它等效于*(p++),因为后缀++优先于一元*。但是,当稍后执行该代码时,将首先取消对存储器位置*p的取消引用,然后再将p的地址增加1。

这又是因为后缀++遵循一条规则,该规则说:“结果的值计算在更新操作数的存储值的副作用之前进行排序”。


1)考虑一下数学方程,例如:a * b + c * d-数学和C语言中的运算符优先级会迫使您将其计算为(a * b) + (c * d),但它不会告诉您有关是否应该在a * b之前或之后计算c * d的任何信息。

相关问题