1、指向常量的指针(常量指针)
常量指针定义“const int * pi=&a”,告诉编译器,*pi是常量,不能修改。
例如:
const int a = 1;
const int b = 2;
const int * pi=&a;
*pi = 3;//error, 指针指向的常量不可以修改
pi = &b;//ok, 指针值可以修改
2、指针常量
指针常量定义“int * const pi=&a", 告诉编译器,pi是常量,不能修改,但是*pi可以修改。
在指针名前加const,表示指针本身是常量。在定义指针常量时必须初始化。
例如:
char * const pi = "abcd";
pi = "edf"; //error,指针常量不可以改变指针值
*pi = ‘w’; //ok,pi指向的内容为“wbcd”
*(pi+1)= ‘y’; //ok,pi指向的内容为wycd
*pi++=‘y’;//error,不可以改变指针值
const int b = 2;
int * const pc = &b; //error,不可以将const int * 转换成 int *
3、指向常量的指针常量(常量指针常量)
常量指针常量定义“const int * const pi = &a”,告诉编译器, pi和*pi都是常量,都不可以修改。
例如:
int a = 1;
int b = 2;
const int * const pi = &a; //ok, 可以将int *转换成const int *
pi = &b; //error, 指针值不可以修改
*pi = 3;//error, 指针指向的内容也不可以修改
a = 4;//ok