C编程语言中的运算符优先级

时间:2012-05-01 13:13:19

标签: c

如果我写下面这样的代码?

int arr[] = {6, 7, 8, 9, 10};
int *ptr = arr;
*(ptr++)+= 123;

现在arr []中的元素是什么?

我最初认为arr []现在应该是{6,130,8,9,10},但实际上结果是{129,7,8,9,10},我不知道为什么?< / p>

在我看来,ptr ++在括号内,所以ptr应该首先增加,不是吗?在它增加一之后,它应该指向数组中的第二个元素。

4 个答案:

答案 0 :(得分:5)

ptr++值是ptr在任何增量之前的值(副作用在此期间的某个时间递增ptr评估表达)。

这是*(ptr++)中取消引用的值。

如果您在后续表达式中取消引用ptr,则它会指向下一个元素,即值为7的元素。

答案 1 :(得分:4)

如果您想要您期望的行为,请使用++ptr(即预增量)。当发生增量后,括号不会影响。换句话说,它与优先权无关。

答案 2 :(得分:0)

ptr ++ 的基本含义是首先使用然后增加,这就是为什么它被称为后增量运算符。这意味着仅当当前指令已完成执行且变量在后续指令中再次使用时,才会更新变量ptr的值。

虽然 ++ ptr 恰好相反,但是 First Increment然后使用,它被称为 Pre Increment Operator

答案 3 :(得分:0)

这个ptr ++的效果只会在';'之后发生 ptr ++相当于ptr = ptr + 1;但这只会做 在该声明的分号后。 在操作期间ptr值为arr [0] *(ptr ++)+ = 123; 但在那之后,ptr将等同于arr [1]