前/后增量指针

这两个表达式之间是否有区别:

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

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