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

2021-09-12 21:35:08 字數 1138 閱讀 9340

阿彌陀佛,工作以後又回來補這些知識了,果然時間久了就容易忘,記錄在這裡以後好翻閱:

首先來看看乙個比較簡單的自增運算的例子:

a=i++;

b=++i;

相信這個大家都比較清楚吧

對於 a來說,先賦值i的值給a,然後i自己加1;

對於b來說,i自己先加1,然後賦值給b;

好了,來背口訣,i++先賦值再運算;++i先運算再賦值;

上面這個例子比較簡單,只含有自增運算的表示式,但當自增運算子和指標結合在一起時,我們就可能有點懵了

舉例如下:

int a=;

int *p=a;  //此時*p=1; 即指向陣列a的首位址

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

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

以上對q的兩個賦值運算操作結果是一樣的;為啥??

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

而對於 q=*++p   //p位址先加1  然後再取p位址的值

同理 對於 ++i 是先運算  再賦值,實在不能理解,拿下面這段**一執行就知道了:

#includeint main();

//int *p=a;

//printf("%d\n",*p);

//printf("%d\n",*p++);

//printf("%d\n",*(p++));

//printf("%d\n",*++p);

//printf("%d\n",(*p)++);

//printf("%d\n",++*p);

int i=1;

int a=i++;

printf("a=%d\n",a);

printf("i=%d\n",i);

int a1=2*(i++);

printf("a1=%d\n",a1);

printf("i1=%d\n",i);

int a2=2*(++i);

printf("a2=%d\n",a2);

printf("i2=%d\n",i);

}

C語言中指標的自增運算總結

如下 includeint main 程式執行結果為 a 1,p 1 a 2,p 2 c 2,p 858993460 d 1638272,p 1638272 請按任意鍵繼續.程式中 p 等價於a c p 等價於,d p等價於 d p 和由於編譯程式為變數分配的位址不連續,所以d的值會出現上述結果。為...

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

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 取...

C語言中自增運算子的解析

關於c語言中a a這種自增運算的討論其實很無聊,但是有時候為了應付面試,還不得不細細 一下。環境 win7,vs2010 例題 寫出判斷abcd四個表示式的是否正確,若正確,寫出經過表示式中 a的值 3分 int a 4 a a a b a a c a a d a a 問 a 答 c錯誤,左側不是乙...