阿彌陀佛,工作以後又回來補這些知識了,果然時間久了就容易忘,記錄在這裡以後好翻閱:
首先來看看乙個比較簡單的自增運算的例子:
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錯誤,左側不是乙...