*(c ++)运营商订单

时间:2010-07-15 01:46:36

标签: c++ operators

在解析此表达式时适用哪些优先规则:

*(c++);  // c is a pointer.

谢谢。

好吧,我尝试了以下

x = *c; c++;
x = (*c++);
x = *(c++);

它们似乎是等价的

4 个答案:

答案 0 :(得分:6)

++运算符与优先级没有多大关系,但只是在评估后才会增加。

所以* c将被“返回”,然后c将递增。

请不要将优先顺序与执行顺序混为一谈!

答案 1 :(得分:5)

对表达式进行分组括号,因此在++之前评估*

如果删除括号以获取*c++,则由于优先规则,表达式仍将被解析为*(c++)而不是(*c)++

答案 2 :(得分:2)

首先应用指针增量,因为括号,然后是解除引用。

但是,c++的返回值是增量前c的值。因此,表达式*(c++)的返回值与*c相同。例如:

char *c = "Hello";
char a, b;

a = *c;            // a is 'H'
b = *(c++);        // b is 'H', but now c is "ello"

答案 3 :(得分:1)

正如mvds所说:“X ++”运算符在评估后执行。

从C语言参考:“当postfix ++应用于可修改的左值时,结果是左值引用的对象的值。在记录结果后,对象增加1(一)。 “