C-數組與指針

總結一些C語言中關於數組和指針的關係。

1、"[]" 運算。下標運算"[]"實際上是由另一個運算定義的。C語言規定下面兩個表達式  表達式1[表達式2] 與 ( *( (表達式1)+(表達式2) ) )

是完全等價的。由於"+"具有交換性,故  表達式1[表達式2]   與 表達式2[表達式1]完全等價,例如 int i[1] = 7; i[0] = 0[i] = 7。

2、數組名是指針,指向數組第一個元素,是常量。  double  d [6] = {2}; "d[0]" 等價於 "( *( (d)+(0) ) )" ,也就等價於"*d",而"*"做一元運算符時運算對象是指針,故 "d"是一個 "int *"類型的指針,數組名是指針。

3、數組名不僅僅是指針,也代表數組所佔據的那塊內存



4、指向數組的指針。對於數組,由於數組名也可以代表數組所佔據的內存,所以也可以由數組名得到數組的指針。int a[20];

"a" 與"&a"都是指針常量,值相同,但是數據類型不同。"a"是 "int *"類型指針,加1意味着在數值上加上 "sizeof (int)",而"&a"是 指向一個 "int [20]"這樣的數組,因而加1意味着加上 ”sizeof(int [20])"。

5、與數組名對應的形參。在用數組名做實參時,形參對應的數據類型可以用不完全類型描述,實際上是一種指針類型。int a[10],a做實參時,形參類型應該是 int  [] 即 int *。

6、高維數組名是指針。如 int a[2][3]; a是指向一個由3個 int類型數據構成的一維數組的指針(int (*) [3]),即a[0] 。注意 與int * [3]不同,int * [3]是定義一個數組,數組元素爲int類型指針。注意a 與&a 加1結果是不同的,類似一維數組。

7、高維數組名是內存,二維數組所佔據的那塊內存。


參考資料:狂人C-程序員入門必備(關於指針的章節)

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