本篇博文博主無聊寫的,表達方式上主觀痕跡很重,並且沒有經過程序驗證,如果有人看的話,看不懂的也別當真,如果有錯煩請指出。
那麼假如一維指針是這樣的:
int *p;
如果是32位系統,那麼p本身也就是一個32位的內容,指向32位的int字符。
二維指針是這樣的:
char **p;
依舊是32位系統,p本身是32位,指向的地址也是32位,該地址指向的內容則是8位的。
所以一維指針的作用就是存儲那個字符或者字符串的地址,
而二維指針的作用就是存儲多個字符或者字符串的地址,比如char *p[8]就是指向多個字符串,而char (*p)[8]就是指向多個字符。
那麼如果有這樣的東西 char ***p; 這個東西是可以編譯通過的。
二維指針和三維指針的區別在於:
二維指針**p的*p形態時,其值爲地址,*(++*p)爲地址加一後取地址後再取值,所以第一級地址是連續的,第二級值的地址可以是分散的。
同理三維指針***p,第一級地址是連續的,第二級值的地址可以是分散的,第三級值的地址可以是更分散的。
所以二維指針已經有三維指針的分散尋址的功能了並且說到底都是指向多個字符或者字符串,目前找不到理由用這種複雜容易出錯但是又沒優勢的品種。
而關於多維數組,一個有意思的用法如
char y[2][2][2][2] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
這樣就是一個4bit的二進制轉成十進制的轉換器了,如輸入[0][0][0][1] 就會輸出1,而輸入[1][0][0][0]就會輸出8。
哈哈,是不是很無聊? : )