int board[8][8]; //int數組的數組
int **ptrl; //指向int的指針的指針
int * risks[10]; //具有10個元素的數組,每個元素是一個指向int的指針
int (* rusks) [10]; //一個指針,指向具有10個元素的int數組
int * oof[3][4]; //一個3*4的數組,每個元素是一個指向int的指針
int (* uuf) [3][4]; //一個指針,指向3*4共12個元素的int數組
int (* uof[3]) [4]; //一個具有3個元素的數組,每個元素都是一個指向具有4個元素的int數組的指針
如果你能夠很輕鬆的辨別出上面這些定義的意思,那麼恭喜你,你已經基本掌握了指針精髓。下面我們來詳細分析一下;
1、表示一個數組[ ]和表示一個函數()具有同樣的優先級,這個優先級高於間接運算符*的優先級。這就以爲着下面的聲明使得risks是一個數組,並且是一個指針數組,而不是一個指向數組的指針!
int * risks[10];
2、[ ]和()都是從左到右結合的,方括號之前的先組合在一起,這就意味着下面的聲明使得rusks是一個指針,並且是一個指向具有10個int值的數組的指針。
int (* rusks) [10];
3、int * oof[3][4]; //一個3*4的數組,每個元素是一個指向int的指針。
它是一個3*4的數組,數組裏面每一個元素都是指向int的指針,所以內存需要爲12個指針留出儲存空間。
4、int (* uuf) [3][4]; //一個指針,指向3*4共12個元素的int數組。
它是一個指針,一個指向3*4的int數組的指針,內存只需要爲1個指針留出儲存空間。
5、int (* uof[3]) [4]; //一個具有3個元素的數組,每個元素都是一個指向具有4個元素的int數組的指針。
它是一個具有3個元素的數組,每一個元素都是一個指針,並且是一個指向具有4個元素的int數組的指針,內存需要爲3個指針留出儲存空間。
上面的例子就分析完畢。