当有const参与到指针的赋值操作时,经常让人困扰,主要是两个方面
1. int const *p ,const int*p ,int *const p...这些到底是怎么分辨
2.const int num=100;
int *p=#
上面的代码会什么会有warning信息出现
针对第一个问题,可以这么理解:
凡是出现在*之前的const限定符,都是在限定指针指向的对象
int const*p 和const int *p其实是一样都,都是说指针指向的是一个const int;
凡是出现在*之后的const限定符,都是在限定指针本身
int * const p 这是一个常量指针,只能指向int类型
针对第二个问题,ANSI C标准有描述
任何指针类型赋值操作,都要满足两个条件:
1. 两个操作数都指向相容类型的指针,不管是否包含限定符
2.左侧指针指向的类型必须具有右侧指针指向的类型的全部限定符
举个例子:
const int a=100;
const int *p1=&a;
int *p2=&a;
p1的赋值是没问题的,p2会有warning信息,因为左侧指针指向的类型没有限定符,右侧指针指向的是带有const限定符的int类型。这样的后果就是可以通过p2指针修改掉a的值,导致a不再是const类型。