用const修饰指针有三种方法:
【1】. const int *p
【2】. int const *p
【3】. int * const p
【4】. const int * const p
可以这么理解,const修饰的是它右边的变量。如果const位于星号的左侧,则const就是用来修饰指针所指向的变量(既*p),即指针指向为常量;如果const位于星号的右侧,const就是修饰指针本身(既p),即指针本身指向的地址是常量。所以【1】和【2】的情况是一样的,const修饰的为*p,*p不可更改。【3】中const就是修饰的p,所以p的值不能更改。【4】就是两者的结合,所以无论是*p还是p都不能更改。
【1】、【2】 const在星号前如下:
int num1 = 666;
int num2 = 999;
const int *p = &num1;
//*p = 111; 错误 const修饰*p,*p不可修改
p = &num2;
printf("p = %d\n", *p);
结果输出为:p = 999。
【3】const在星号后面如下:
int num1 = 666;
int num2 = 999;
int * const p = &num1;
*p = 111;
//p = &num2; 错误 const修饰p,p不可修改
printf("p = %d\n", *p);
结果输出为:p = 111。
【4】星号前后都有const如下:
int num1 = 666;
int num2 = 999;
const int * const p = &num1;
//*p = 111; 错误,使用来了const修饰*p,*p不可修改
//p = &num2; 错误,使用了const修饰p,p不可修改
printf("p = %d\n", *p);
结果输出为:p = 666。