c語言筆記
不知道在哪看到的一道題目,本來覺得很簡單,指標學的一般的我竟然選擇不出來答案!!!
#include int main()
; int *ptr=arr;
*(ptr++)+=123;
printf("%d,%d\n",*ptr,*(++ptr));
for(int i=0;i<5;i++)
printf("%d ",arr[i]);
return 0;
}
執行結果:
答案:8 8
【正確解釋】
*(ptr++)+=123;
++符號放在後面先用後加,所以arr[0]=123+6=129,然後ptr指向arr[1]所在的位址。
printf("%d,%d\n",*ptr,*(++ptr));
難懂的是這兩個指標變數的呼叫順序.有兩種解釋:
1、printf的引數,函式printf從左往右讀取,然後將先讀取放到棧底,最後讀取的放在棧頂,處理時候是從棧頂開始的,所有從右邊開始處理的。
2、這句**的執行涉及到彙編的函式的引數的壓棧過程是從後面的引數開始壓棧的,所以*(++ptr)會先被壓棧,導致++ptr首先生效所以往棧裡壓入*ptr時,此時的ptr已經變成指向arr[2]了。
這兩種我感覺都可以理解。
類似於:
【拓展】:1、*在c語言中代表三種含義:
*標誌 (比如:int *p)
*指標運算 (比如 * p++)
*乘法運算(比如 3*5)
2、*p++與(*p)++
(*p)++指的是先取出p指向的儲存單元中的內容,然後將取出的數值加1,而p仍然指向原來的儲存單元。
*p++則指的是先取出p指向的儲存單元中的內容,然後將p值加1,此時p不再指向原來的儲存單元。
【參考】
1、2、
C語言指標和指標變數
一 指標 概念 當定義乙個變數時,系統會為這個變數分配記憶體,比如,int a,系統會給變數a分配一塊記憶體,大小為in型的4個位元組,而且每個位元組都會有乙個編號,這個編號就是位址,這個編號是計算機抽象出來用於訪問資料的,實際上為乙個數字。當計算機需要訪問資料時,會先找到它的位址,再來獲取改位址裡...
c語言指標 指標和指標變數
指標是c語言中乙個重要的概念,也是c語言的重要角色。可以說指標是c的精華所在,學習指標雖然不易,但是只要肯花上時間去反覆的理解和實踐,就一定可以很好的掌握它。一 指標是什麼 指標到底是什麼?我們先舉乙個例子。假設我們在火車站 附近開了一家賓館,這家賓館有三千多間屋子,為了方便管理,我們給每個房間都加...
C語言 指標變數本質
c語言指標是乙個經常使用的變數,可是經常在二級指標 指標中搞混,指標的本質就是乙個int型的變數,只不過這個變數是記憶體塊的位址,通過在這個變數前面加星號可以間接的訪問這個記憶體塊的內容。通過下面的示例可以清晰的明白指標的本質,include typedef struct teracher intg...