前/后增量指针
这两个表达式之间是否有区别:
(*x)++
和
++(*x)
我可以看到这两个语句都替换了* x中的(* x + 1)的内容。 但他们之间有什么不同吗?
一个在使用之前 (pre)增加存储在x
的值,而另一个在使用之后(post)增加它。
另请注意, ++(*x)
与(*x + 1)
。 第一个增加值并将其存储回来,另一个只增加值。
让我们说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
(*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
)。
一个是“前”,另一个是“后”。 这就是区别。 一个在增量(第一个选项)之前进行评估,另一个在增量之后进行评估(第二个选项)。