一些比较容易搞混的声明:
char *p[20];
char (*p)[20];
第一种声明由于[]的优先级要高于*,所以p先与[]结合表示p是一个有20个元素的数组,这个数组的元素是指向char类型的指针
第二种声明由于()的优先级要高于[],所以p先与*结合表示p是一个指针,指向一个有着20个char类型的元素的数组
const int * grade
int const * grade
int *const grade
首先要明白const关键字并不能把变量变成常量!在一个符号前加上const限定符只是表示这个符号不能被赋值。也就是说它的值对于这个符号来说是只读的。
最后一种声明,表示指针是只读的,指针的指向不能发生改变,但指针指向的对象的值可以发生该变,即可以通过指针来修改指针指向的对象的值
int a = 3,b;
int * const p = &a //指针常量
//那么分为一下两种操作
*p= 9;//操作成功
p = &b;//操作错误
前两种声明是一样的,表示grade这个指针指向的对象是只读的,指针的指向可以改变,但不能通过指针来改变指针所指向的值
int a,b;
const int *p = &a //常量指针
//那么分为一下两种操作
*p = 9;//操作错误
p = &b;//操作成功