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;
posted @ 2012-04-17 18:11  csqlwy  阅读(612)  评论(0编辑  收藏  举报