指向數組的指針和指針數據一直是一個繞口,難記,易混,易忘的東西。爲了弄清楚這寫概念。必須記住幾個關鍵點。
1 數據名是數組第一個元素的地址。
2. a[i] 等價於 *(a+i)
舉例:
int a[10];
int *p = a; <==> int * p = &a[0];
即 a 就是 &a[0];
int a[][5];
int (*p)[5] = a ; <==> int (*p)[5] = &a[0];
int *p[5];
p[0] = &a[0][0]; <==> *p = &a[0][0];
以下是引用網絡上的東西
int (*p)[10];
定義了一個數組指針,這個指針與一般的指針沒有什麼區別,僅僅是這個指針指向一個數組。這裏我們把數組作爲了基本的元素處理。也就是說,將整個數組作爲一種類型,而數組名就是這個類型的一個具體變量。例如:
int a[10];
一個數組類型,形狀就是這樣:int [10];a就是新定義的一個變量。
int b[3];
一個數組類型,形狀就是這樣:int [3];b就是新定義的一個變量。
因爲這兩個類型形狀不一樣,因此是兩個不同的類型,因此a,b就是不同類型的變量。這就好比int a和double b :a和b不一樣。不知道大家是否已經對數組類型有了基本的印象?
那麼把數組名作爲該數組類型的一個具體變量,我們就可以定義指向這個變量的指針,即數組指針。
對於數組類型:int [10],我們可以定義一個指針,int (*p) [10].注意這裏一定要加上小括弧。否則就會變成了指針數組。定義了指針之後,我們可以對該指針賦值,如p=&a;如果定義了一個二維數組,int c[3][10]。我們可以認爲定義了一個一維的數組,這個數組有三個int[10]的元素。因此和一般的數組一樣,我們可以將該數組名賦給指針,其實也就是第一個元素的地址付給指針。即: p=c;或者p=&c[0]。其餘情況以此類推。