前/后增量指针

时间:2012-06-07 07:04:37

标签: c

这两个表达式之间是否存在差异:

(*x)++

++(*x)

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

4 个答案:

答案 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)

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