C 增量前/增量后指针
这两种表达方式有区别吗C 增量前/增量后指针,c,C,这两种表达方式有区别吗 (*x)++ 及 我可以看到这两条语句都替换了*x中(*x+1)的内容。但是他们之间有什么区别吗 一个是“pre”,另一个是“post”。这就是区别。一个在增量之前进行评估(第一个选项),另一个在增量之后进行评估(第二个选项)。一个在使用前(pre)对存储在x中的值进行增量,而另一个在使用后(post)进行增量 还要注意的是,+(*x)与(*x+1)不同。第一个增加值并存储回去,另一个只是增加值。让我们假设x所指的值是10 i:e(*x是10) 上述语句将作为执行 1.
(*x)++
及
我可以看到这两条语句都替换了*x中(*x+1)的内容。但是他们之间有什么区别吗 一个是“pre”,另一个是“post”。这就是区别。一个在增量之前进行评估(第一个选项),另一个在增量之后进行评估(第二个选项)。一个在使用前(pre)对存储在
x
中的值进行增量,而另一个在使用后(post)进行增量
还要注意的是,
+(*x)
与(*x+1)
不同。第一个增加值并存储回去,另一个只是增加值。让我们假设x所指的值是10 i:e(*x是10)
上述语句将作为执行 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
y = ++(*x);
+(*x)
计算为*x
+1的值;作为副作用,*x
中的值将增加1
假设代码:
int a = 5;
int *x = &a;
(*x)+
将计算为5
,而+(*x)
将计算为6
注意,在计算表达式后,不必立即应用副作用;它只需要在下一个序列点之前应用
还请注意,括号对于
(*x)++
很重要;后缀++
的优先级高于一元*
,因此*x++
将被解析为*(x++)
;它的计算结果仍然是*x
,但作为一种副作用,它会使指针前进,而不是增加所指向的对象。前缀++
和一元*
具有相同的优先级,因此它们从左到右应用;因此,+(*x)
和+*x
将产生相同的结果(*x
递增,而不是x
) 将它们与printf一起使用..可能重复的@dirkgently-error-duplicate(尽管我猜这个问题的某个地方也有一个真正的重复)。@mikefisher啊,在这种情况下是的,它是相同的。感谢您提到括号的重要性..:)
int a = 5;
int *x = &a;