const与指针的三种形式
使用指针时涉及到两个对象:该指针本身和被它所指的对象。
将一个指针的声明用const“预先固定”将使那个对象而不是使这个指针成为常量。要将指针本身而不是被指对象声明为常量,必须使用声明运算符*const。
所以出现在*之前的const是作为基础类型的一部:
char *const cp ; //指向char的const指针
char const *pc1; //指向const char指针 const char *pc2;//指向const char的指针(这两个声明是等同的)
const char * const pc3//指向const char的const指针
从右向左的记忆方式:
char *const cp ;
cp is a const point to char; 因此cp不能指向别的字符串,但可以修改其指向的内容
char const *pc1;
pc1 is a point to const char; 因此pc2不能修改字符串的内容,但是可以指向其他字符串
const char * const pc3
pc3 is a const point to const point;因此pc3不能修改字符串的内容,也不能修改指向
例
#include<iostream> using namespace std; void main() { char a[] = {"ABC"}; char *const cp = a;//cp is a const point to char; char const *pc2 = "DEF";//pc2 is a point to const char const char *pc3 = "GHI"; cp[0] = 'Z';//cp修改指向内容 pc2 = pc3;//pc2修改指向 cout<<cp<<endl; cout<<pc2<<endl; cout<<pc3<<endl; cout<<a<<endl; }
结果如下
a[]的内容已经被修改,pc2本来指向“EDF”,更改后指向“GHI”
不积小流无以成江河