C學習——指針

1、指針

a)    int a;表示一個內存空間,這個空間用來存放一個整數(int);
b) int* a;
表示一個內存空間,這個空間用來存放一個指針,這個指針指向一個存放整數的空間,即a)中提到的空間;
c) int** a;
表示一個內存空間,這個空間用來存放一個指針,這個指針指向一個存放指針的空間,並且指向的這個空間中的指針,指向一個整數。也簡單的說,指向了一個b)中提到的空間;
d) int (*a)[10];
表示一個內存空間,這個空間用來存放一個指針,這個指針指向一個長度爲10、類型爲int的數組;和int** a的區別在於,+++=1之後的結果不一樣,其他用法基本相同。
以上四種類型見上圖表示。
e) int (*a)(int);
表示一個內存空間,這個空間用來存放一個指針,這個指針指向一個函數,這個函數有一個類型爲int的參數,並且函數的返回類型也是int

 

最近看到有人問到這樣的問題"數組名能否自加問題",最後我經過驗證得出了個結論,不可以,假設有一個整形數組int a[4] 如果出現a++表達式,則是一種錯誤的表達式,但是可以是a+1,所以推出了一個想法就是地址不可以自加,但是可以通過加幾來完成,對數組中其他元素的遍歷,也就是說必須有個"+"號這樣纔可以實現對數組名也就是地址的運算,如果沒有加號則就是錯誤的.當給出一個指針時,int p;p=a;p++;這樣的運算就是正確的,指針是一種可移動的東西,因此可以進行自加,自加有和p+1是一樣的效果,所以由此推出:

   不管是什麼類型的地址都沒有自加,只能通過"+"(這就相當於是地址的移動了)幾來實現地址的轉移,而指針可以進行自加,效果和"+"幾是一樣的.

 

 

發佈了65 篇原創文章 · 獲贊 38 · 訪問量 33萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章