这两个表达有什么不同:
(*x)++
并且
++(*x)
我可以看出这两个语句都替换了*x中(*x+1)的内容。但是它们之间有什么区别吗?
这两个表达有什么不同:
(*x)++
并且
++(*x)
int a = 5;
int *x = &a;
(*x)++
的结果为 5
,而 ++(*x)
的结果为 6
。
需要注意的是,在表达式求值后副作用不必立即应用;它只需要在下一个序列点之前应用。
还要注意对于 (*x)++
括号的位置很重要;后缀 ++
的优先级高于一元运算符 *
,因此 *x++
会被解析为 *(x++)
;它仍然将求出 *x
的值,但作为副作用使得指针向前移动,而不是增加所指向的内容。前缀 ++
和一元运算符 *
具有相同的优先级,因此它们从左到右依次应用;因此 ++(*x)
和 ++*x
将得到相同的结果(*x
得到了递增,而不是 x
)。
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)
。第一个递增值并将其存回,而另一个仅递增该值。