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个指针留出储存空间。
上面的例子就分析完毕。