const可以与指针结合使用,有指向常量的指针、指针常量、指向常量的指针常量。
1.指向常量的指针(常量指针)
定义指向常量的指针变量的一般形式为:
const类型名∗指针变量名;
表示指向的对象是常量,用以保护指针指向的值不被修改,即不能通过指针变量直接更改指针指向的值。例如:
const int a=15;
const int b=30;
int c=25;
const int∗p=&a;
∗p =34; //错误
p=&b;
∗p=44; //错误
p=&c;
∗p=64; //错误
常量指针的使用要注意,指针指向的对象不能通过这个指针来修改,而且不能限制指针指向的值本身操作。也就是说常量指针可以被赋值为变量的地址,之所以叫作常量指针,是限制了通过这个指针修改变量的值。常量指针在函数参数传递中经常被用于保护实参的值不被肆意的修改。
2.指针常量
在定义指针变量时,指针变量前加const修饰,所定义的指针变量就变成了指针类型的常量。定义指针常量的一般形式为:
类型名∗const指针变量名;
定义指针常量限制了指针本身是个常量,它的值是指针,这个值因为是常量,所以不能被赋值。因此,在定义指针常量时必须对其进行初始化,一旦赋值,以后这个常量再也不能指向别的地址。例如:
char∗const pc="abcde1234";(www.daowen.com)
pc="bcde"; //错误
指针常量的指向不能改变,但指针所指向变量的值可以改变。例如:
char carray[20]="C++is Very Good!";
char∗const p = carray;
∗p='B';
p++; //错误
3.指向常量的指针常量
把以上两种作用叠加在一起,就成了指向常量的指针常量。指向常量的指针常量既保护指针的值不被修改,又保护指针指向的值不被修改。指向常量的指针常量定义格式如下:
const类型名∗const指针变量名;
在定义指向常量的指针常量时,必须对其进行初始化,在程序中修改指针的指向和修改指针指向内容的值都是不允许的。例如:
int a=3;
int b =6;
const int∗const pt=&a;
pt=&b; //错误
∗pt=8; //错误
a=9;
【例1.11】定义一个完成字符串复制的函数。
在函数mystrcpy()的形参char∗source前加const,∗source便成为常量,在函数体只不能对其做任何修改,也即保护了实参carray1数组的值不被破坏。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。