規則解析該表達什麼優先級:*(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