指针数组与数组指针
指针数组:就是创建了一个数组,这个数组是指针类型的,数组元素都是指针
数组指针:指向数组的一个指针。
int *p1 [10]
int (*p2)[10]
这两句代码里面其实第一个是指针数组,第二个是数组指针。
为什么这么说呢
从符号的优先级来说[]低于()所以第一句代码,[]是与p结合的,而p是指针类型的,所以说创建了一个有10个元素的指针数组。
而第二句代码,会先执行(),所以*p代表的是一个指针指向的对象,然后这个[]是跟着 *p的,也就是跟着的是 *p指向的对象的,只有一个指针p,指向了一个int类型的数组。
指针类型
1、指向常量的指针
cont int y=5; //创建一个int类型的常量
const int *p=&y; //创建一个int类型的指针p,让p指向常量y;
其中指针p是变量,y是常量,p指向常量y,而*p代表常量y。
所以指针变量p可变,*p不可变。
其实p改变时,也就是说p指向了其他对象了。那么 *p也会随之改变。
2、常量指针
int y=5; //定义一个int类型的变量
int * const p=&y; //创建一个int类型的常量指针,指针指向变量y
其中指针p是常量,y是变量,p指向变量y,而*p代表变量y。
所以常量指针p不可变, *p可变。
也就是代表指针一旦指向了一个对象就不可在变。
3、指向常量的常量指针
const int y=5; //创建一个int类型的常量
const int * const p=&y; //创建一个int类型的常量指针,指针指向常量y
其中指针p是常量,y是常量,p指向常量y,而*p代表常量y。
所以常量指针p不可变, *p不可变。
也就是代表指针一旦指向了一个对象就不可在变,而此时指针指向的对象是常量,所以指针指向的对象也不可变。