3

两种表达方式有区别吗:

(*x)++

++(*x)

我可以看到这两个语句都替换了 *x 中 (*x+1) 的内容。但是它们之间有什么区别吗?

4

4 回答 4

7

(*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)。

于 2012-06-07T12:04:54.343 回答
6

假设 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

于 2012-06-07T09:23:07.887 回答
2

x 一个在使用之前递增存储的值(pre),而另一个使用后递增(post)。

另请注意++(*x)与. 第一个增加值并将其存储回来,另一个只是增加值。(*x + 1)

于 2012-06-07T07:10:01.787 回答
1

一个是“前”,一个是“后”。这就是区别。一个在增量之前评估(第一个选项),另一个在增量之后评估(第二个选项)。

于 2012-06-07T07:08:05.367 回答