右左法则:首先从最里面的圆括号(未定义的标识符)看起,然后往右看,再往左看。每当遇到圆括号时,就应该掉转阅读方向。一旦解析完圆括号里面所有的东西,就跳出圆括号。重复这个过程直到整个声明解析完毕。
int p;
这是一个普通的整型变量
int *p;
首先从p处开始, 先与*结合. 所以p是一个指针, 然后再与int结合. 说明p指向的为int型. 所以p是一个指向整型的指针变量
int p[n];
首先从p处开始, 先与[]结合, 所以p是一个数组, 然后再与int结合, 说明数组的元素为int型, 所以p是由n个int型数据的数组.
int *p[n];
从p处开始, 先与[]结合([]的优先级比*高), 所以p是一个数组, 然后再与*结合,说明数组的元素是指针类型, 再与int结合,说明指针的类型为整型,所以p是由n个int型指针的数组.
int (*p)[n]
从p处开始, 括号里面先执行, 先与*号结合, 说明p是一个指针. 然后再与[]结合,说明p指向的是一个数组. 再与int结合. 说明数组元素的值为int型, 所以p是一个指向由n个元素的数组的指针.
int **p
首先p与*结合, 说明p是一个指针, 然后再与*结合,