1. 程式人生 > >C語言陣列篇(五)多級指標和二維陣列指標的區別

C語言陣列篇(五)多級指標和二維陣列指標的區別

多級指標   以二級指標為例 二級指標的由來是 指標陣列 的指標形式. int *p[10] 讀取的順序是
p[10]       --> 10個空間的陣列
* p[10]     --> 這10個空間的數組裡面存放的資料都是 指標型的資料
int *p[10]  --> 數組裡面每個指標指向的空間存放的是int型的資料


int *p[10] --> int **p;
p:  指標陣列的陣列名,也是陣列的首地址.
*p  數組裡面存放的指標
**p 數組裡面存放的指標 指向的空間 的內容

 

 

二維陣列指標:
    二維陣列:

int buf[5][6] = {{1,2,3},{2,3,4},{3,4,5},{4,5,6},{5,6,7}};

0X00:   1   2   3   0   0   0
0X18:   2   3   4   0   0   0
0X30:   3   4   5   0   0   0
0X48:   4   5   6   0   0   0
0X60:   5   6   7   0   0   0
這是一個 5行 6列 的陣列. 在讀取的時候, 每次讀1行, 每行有6個元素, 每個元素有int大小.      二位陣列的每一行都有一個 行首地址
, 第一行的首地址也是二維陣列的 首地址. 所以將二維陣列看成是許多一維陣列的組成,就好理解了.   類比於普通的一維陣列:
int a       [10];    //a代表的是陣列首地址,也是行首地址,從這個地址開始,有10個int大小的資料空間.
int (*buf)  [6];    //(*buf) == a 表示的是行首地址, 從這個地址開始有 6個 int 大小的資料空間

 

    int (*buf)[6];

    讀取的順序是:     *buf 定義一個指標變數,這個變數裡面是指標,也就是地址,作為二維陣列行首地址        //就好像是一維陣列的陣列名a     int (*buf)[6];  以行地址為首,開闢6個int空間.       
int
(*buf)[6] *(buf+i) //表示 buf[i][0] 的行首地址, *(buf+i)+j //表示 buf[i][j] 的元素地址, *(*(buf+i)+j) //表示 buf[i][j] 的內容

 

三維陣列指標:
int buf[2][3][4];  //三位陣列        
int (*buf)[3][4]    //三維陣列指標

 


所以:
二級指標:   int *p[n];

二維陣列:  int (*p)[n];