標籤: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-程式員入門必備(關於指標的章節)
C-數組與指標