指针常量、常量指针;数组指针、指针数组

指针常量 (const pointer)(意为常量是指针)
p是指针,const要修饰p,所以const要在p前:

int val = 100;
int *const p = &val;
p++;                           //非法;
*p = 42;                       //合法;

常量指针 (pointer to const)(意为指向常量的指针)
也就是*p不能变,所以const放在*p前面:

int val = 100;
const int *p = &val;
p++;                             //合法;
*p = 42;                         //非法;

其实只有中文才会区分得这么蛋疼,因为人们都喜欢缩写缩写,最后苦了自己。看二者英文名字就完全没有这种区分障碍了。

关键是记住const修饰谁就紧紧靠在谁前面。

送分题:

const int *const p = &val;
p++;                
*p = 42;

p++和*p = 42两条语句是否合法?



数组指针(本质是一个指针,它指向一个数组,数组大小为4):

int (*p)[4];

指针数组(本质是一个数组,里面存放4个指针):

int *p[4];

关键看结合顺序,int (p)[4]的括号优先级高,因此它先是一个指针,然后就明白是指向一个存放4个int类型的数组;int *p[4]先是看p[4],显然是个大小为4的数组,再看类型是int *,说明里面存放整数指针*

送分题:

int *(*p)[4];

这条语句何解?

你可能感兴趣的:(指针常量、常量指针;数组指针、指针数组)