这两个表达式之间是否存在差异:
(*x)++
和
++(*x)
我可以看到这两个语句都替换了* x中的(* x + 1)的内容。但他们之间有什么不同吗?
答案 0 :(得分:6)
让我们说x指出的值是10 i:e(* x是10)
y = (*x)++;
上述声明将作为
执行
1. y = * x
2. * x = * x + 1
所以y = 10& * x是11
y = ++(*x);
上述声明将作为
执行
1. * x = * x + 1
2. y = * x
所以y = 11& * x是11
答案 1 :(得分:6)
(*x)++
评估到*x
的值;作为副作用,*x
中的值将增加1。
++(*x)
评估到*x
+ 1的值;作为副作用,*x
中的值将增加1。
假设代码:
int a = 5;
int *x = &a;
(*x)++
将评估为5
,而++(*x)
将评估为6.
请注意,在评估表达式后,不必立即应用副作用;它只需要在下一个序列点之前应用。
另请注意(*x)++
的括号重要; postfix ++
的优先级高于一元*
,因此*x++
将被解析为*(x++)
;它仍然计算为*x
的值,但是副作用会使指针前进,而不是将指向的内容增加到。前缀++
和一元*
具有相同的优先级,因此它们从左到右应用;因此++(*x)
和++*x
会有相同的结果(*x
会增加,而不是x
。
答案 2 :(得分:2)
在使用(pre)之前,一个增加 另请注意,x
中存储的值,而另一个 之后使用它(post)。< / p>
++(*x)
不与(*x + 1)
相同。第一个增加值并将其存储回来,另一个只增加值。
答案 3 :(得分:1)
一个是“前”,另一个是“后”。这就是区别。一个在增量(第一个选项)之前进行评估,另一个在增量之后进行评估(第二个选项)。