规则解析该表达什么优先级:*(C++)运营商为了
*(c++); // c is a pointer.
谢谢。
好,我尝试以下
x = *c; c++;
x = (*c++);
x = *(c++);
他们似乎相当于
规则解析该表达什么优先级:*(C++)运营商为了
*(c++); // c is a pointer.
谢谢。
好,我尝试以下
x = *c; c++;
x = (*c++);
x = *(c++);
他们似乎相当于
++运算符与优先级没有太大关系,但是告诉在评估之后才增加。
所以* c将被“返回”,然后c将递增。
请不要混淆优先顺序和执行顺序!
指针增量首先应用于括号,然后是取消引用。
但是,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"
正如mvds所说:在评估之后执行“X ++”操作符。 “当Postfix ++应用于一个可修改的左值时,结果是左值所引用的对象的值。在记录结果之后,该对象增加1(一) 。“
OMG的人,请...尝试它为你自己,工作(*(C++))相当于工作(* C); C++; 真的。 – mvds 2010-07-15 01:58:22
谢谢。 我试过了,它似乎是这样,就像你说的,(*(C++))和(* C++)在增量 – Anycorn 2010-07-15 02:19:53
之前的解引用试图使事情变得更清晰:“precendence”处理“胶水”规则,并且可以被迫以括号()方式行事,就像在数学中一样。 ++比*有更高的优先级,因此在这种情况下对c有点困难。 ++ c和C++用于在表达式中使用c的值之前或之后执行。请注意,即使*({C++;})被评估为* c; C++;但*({C++; C++;})被评估为*(++ c); C++; – mvds 2010-07-15 09:45:16