声明说明符号的顺序是不重要的,事实的标准顺序是:首先连接说明符,然后是类型限定符。如:
extern const int size=1024;//这是最正常的const使用
1)const int* ptr=&size;
估计你第一时间就认为是指向整数的常量指针吧。其实这是指向常整数的指针,即指针可以修改,但指针指向的内容不能修改。
2)int * const* ptr;
这是个指向整数指针的指针,指向整数的常量指针的指针,即整数可以改变,但是指向整数的指针是常量的,指向整数指针的指针却也可以改变。
3)const int **ptr;
那这个呢?这是一个指向常整数的指针的指针,即整数不能修改,整数的指针和指针的指针可以修改。不过在vc很奇怪的,必须要以一个const**才能赋予ptr值,而其他都不用,不过按照编译器指示就通过编译就行了。如:
int a=10;
const int *b=(&a);
const int **ptr=&b;
4)const int * const* ptr;
这又是什么怪物呢?这是指向常量整数的常量指针的指针,就是说无论整数和指向整数的指针都是不可变的。
可能很多情况之下不需要那么执着这个关键字,不过某些公司招聘就喜欢出一些刁难的题,所以特意研究这个关键字,比较笨,花了一个小时才终于悟出了其道理。