1. 程式人生 > >C語言陣列篇(二)指標陣列和陣列指標

C語言陣列篇(二)指標陣列和陣列指標

陣列指標 和 指標陣列

 

        這兩個名詞可以說是經常搞混了         陣列指標--> 陣列的指標       就是前面講的 指向陣列a的指標p;         指標陣列-->存滿指標的陣列  就是一個數組裡面存的都是指標.----> 也是所謂的二級指標

 

        陣列指標就不講了,見一維陣列和指標.

 

        那麼指標陣列呢?         首先,指標陣列是 一個數組裡面都是指標

 

        第一步,我們需要一個數組         point[10]   //我們定義了一個空間為10的陣列                  第二步,這個陣列是什麼型別的? 指標型別的         * point[10]     //區別: int a[10] 中 資料元素是int型的,那我們現在需要指標型的,就把int換成 * .

 

        還沒完,第三步,數組裡面的每個元素嗾使指標,但是指標就必須指向拎一個記憶體空間,那麼這個空間有多大?         int *point[10]     //表示有一個數組p,裡面存放的都是指標型別的變數,然後這些指標都指向int大小的空間.

 

        int *p[10] 就是陣列指標.

 

            從這裡我們也發現,他的優先順序是 以point為中心,從右往左 先p[] --> *p[] --> int *p[]

 

        指標陣列就是二級指標.             因為指標陣列不單單又有它自己本身,還附帶每個指標袁術指向的小空間.那麼:

 

        陣列的地址是p,從陣列陣列的第一個元素是*p,第二個元素是*(p+1),第三個是...         那麼,第一個元素指標所指向的小空間的內容就是 *(*(p)) 簡寫成 **p;

 

        所以,對於二級指標**p 來說 p 是陣列地址, *p 是數組裡面的元素, **p 是數組裡面指標指向的資料 .

 

        從另一個角度理解 *p[10] 因為 p[10] 的指標形式是 *p 所以--> *(*p) 也符合定義
 //指標陣列的形參 -->二級指標
        
int func(int **p){
//...
return 0;
}
int main(){ //陣列指標 int *p[10]; //陣列指標 func(p); //指標陣列的實參

}