两种表达方式有区别吗:
(*x)++
和
++(*x)
我可以看到这两个语句都替换了 *x 中 (*x+1) 的内容。但是它们之间有什么区别吗?
(*x)++ 评估为*x; 作为副作用,in 的值*x将增加 1。
++(*x) 计算为*x+ 1 的值;作为副作用,in 的值*x将增加 1。
假设代码:
int a = 5;
int *x = &a;
(*x)++将评估为5,而++(*x)将评估为 6。
请注意,不必在计算表达式后立即应用副作用;它只需要在下一个序列点之前应用。
另请注意,括号对;很重要 (*x)++postfix++的优先级高于 unary *,因此*x++将被解析为*(x++); 它仍然计算 的值*x,但作为副作用推进指针,而不是增加被指向的东西。前缀++和一元*具有相同的优先级,因此它们从左到右应用;因此++(*x)并且++*x会产生相同的结果(*x增加,而不是x)。
假设 x 指向的值是 10 i:e (*x is 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 一个在使用之前递增存储的值(pre),而另一个在使用后递增(post)。
另请注意,++(*x)与. 第一个增加值并将其存储回来,另一个只是增加值。(*x + 1)
一个是“前”,一个是“后”。这就是区别。一个在增量之前评估(第一个选项),另一个在增量之后评估(第二个选项)。