const限定符
1.因为常量在定义后就不能修改,所以定义时必须初始化。
2.在一个文件全局作用域中定义非const变量,在另外的文件中做extern声明,就可以使用这个变量:
//文件一 int counter; //文件二 extern int counter; ++counter; //这里变量声明后就可以用
但是,对于一个文件全局作用域中定义的const变量,在另外的文件中做extern声明,是不能被访问的:
//文件一 const int counter=func(); //文件二 extern const int counter; ++counter; //这里变量声明后不可以用
这里const变量要想能够被其他的文件访问,必须显示的指定它为extern:
//文件一 extern const int counter=func(); //文件二 extern const int counter; ++counter; //这里变量声明后可以用
3.指向const对象的指针
const double *cptr; //cptr是一个指向double类型的const对象的指针(cptr本身不是const)
注意:把一个const对象复制给一个普通的,非const对象的指针会导致编译时的错误。
但是允许非const对象的地址赋值给指向const对象的指针,这种情况虽然不能通过const对象的指针修改这个对象,但是可以通过其他的方法修改这个对象。
在实际的程序中,指向const对象的指针常用作函数的形参。
4.const指针
int num=0; int *const cptr=# //cptr是const指针,但是他所指向的对象为非const可以修改
注:与任何const量一样,const指针也必须在定义时初始化。
5.指向const对象的const指针
const int num=0; const int *const cptr=# //cptr是const指针,他所指向的对象也为const
6.指针与typedef
typedef string *pstring; const pstring cptr;//请问cptr指向什么类型???
这里const pstring时,const修饰的时pstring类型,pstring是一个指针。因此,该声明语句应该是把cptr定义为指向string类型的const指针,等价于:
string *const cptr;
当然,下面形式同样等价:
pstring const cptr;