c 自增運算和指標的優先順序問題

2021-10-22 18:59:50 字數 1973 閱讀 6948

i++先賦值再運算;++i先運算再賦值q=*p++;   //等價於 q=*p; p++;

q=*(p++);   //等價於 q=*p; p++;

*和++的優先順序是相同的,運算子的結合都是自右向左的,因此 ++只對 p 產生作用,而不是*p

cout << ++*ptr << endl; // address do not change; only the content change 取了值之後,已經和指標沒有關係了

cout << (*ptr)++ << endl; // address do not change; only the content change 取了值之後,已經和指標沒有關係了

cout << *ptr << endl;

for (int i = 0; i < 3; i++)

cout << "final blocks[i] is: " << blocks[i] << endl;

return 0;

}// f

// g

// g

// h

// final blocks[i] is: a

// final blocks[i] is: h

// final blocks[i] is: x

#include using namespace std;

int main() ;

char *ptr = blocks;

cout << *++ptr << endl; // f

cout << ++*ptr << endl; // g 取了值之後,已經和指標沒有關係了

cout << *ptr++ << endl; // g ptr先賦值 然後ptr再加1(所以位址加1)

cout << *ptr << endl;

for (int i = 0; i < 3; i++)

cout << "final blocks[i] is: " << blocks[i] << endl;

return 0;}f

ggxfinal blocks[i] is: a

final blocks[i] is: g

final blocks[i] is: x

#includeusing namespace std;

int main() ;

int *p=a;

// cout << "*p:" << *p << endl; // 1

// cout << "*p++:" << *p++ << endl; // 1 p先賦值 然後p再加1(所以位址加1)

// cout << "*p++:" << *p << endl; // 3

cout << "*p:" << *p << endl; // 1

cout << "*p++:" << (*p)++ << endl; // 1 還是先賦值 再加1 但是此處取了值之後,已經和指標沒有關係了

cout << "*p++:" << *p << endl; // 2

// cout << "*p:" << *p << endl; // 1

// cout << "*p++:" << *++p << endl; // 3 位址先加1 再賦值

// cout << "*p++:" << *p << endl; // 3

return 0;

}

c語言中的自增運算和指標的優先順序問題

阿彌陀佛,工作以後又回來補這些知識了,果然時間久了就容易忘,記錄在這裡以後好翻閱 首先來看看乙個比較簡單的自增運算的例子 a i b i 相信這個大家都比較清楚吧 對於 a來說,先賦值i的值給a,然後i自己加1 對於b來說,i自己先加1,然後賦值給b 好了,來背口訣,i 先賦值再運算 i先運算再賦值...

自減自增和逗號的優先順序

問題引入 今天突然想起一種寫法n 10 printf d d n n,n 最後輸出的竟然是9 10,感覺很驚訝,於是又多試了幾組,如下 include using namespace std int main 輸出就更驚豔了,是6 7 8 6 6 9 10 6,因此我就仔細查了優先順序,大致發現了其...

運算子優先順序,自增 ,自減 ,題

初始化 int 型別變數 a b c 都為 2 那麼經過以下運算之 a a a b b b c c c 三個的值分別為多少?答案 4 5 6 解析 關於自增 的解釋 a 和 a a 是先自增,然後進行其他運算,而 a 是 a 先進行其他運算,然後自增。注意 a 和 a 運算物件都是左運算元,使可變左...