在解析此表达式时适用哪些优先规则:
*(c++); // c is a pointer.
谢谢。
好吧,我尝试了以下
x = *c; c++;
x = (*c++);
x = *(c++);
它们似乎是等价的
答案 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(一)。 “