如果我写下面这样的代码?
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应该首先增加,不是吗?在它增加一之后,它应该指向数组中的第二个元素。
答案 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]