C語言陣列篇(五)多級指標和二維陣列指標的區別
阿新 • • 發佈:2018-12-07
多級指標
以二級指標為例
二級指標的由來是
指標陣列 的指標形式.
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];