山自高兮水自深,当尘雾消散,唯事实流传。

2008-10-06

指针常量与常量指针

C++语言的一个复杂点是在指针上,在与const字符结合后,两者狼狈更是弄得人头晕,毕竟是好久没有用到的语法点,一时还真回不过神来,在这里写一段程序阐明其中的玄机。


char c1 = 'a';char c2 = 'b';
const char *L;                      //指针常量,指针指向的值不能改变
char const *M;                     //跟上面一样
char *const N = &c1;          //常量指针,指针的地址不能改变
char const*const O = &c1; //指向常量的指针常量,地址和指向的值都不能改变
L = &c1;    //OK          
*L = c1;     //error,改变了指向的值 
N = &c2;   //error,改变了指针的地址
*N = c2;    //OK
O = &c2;    //error,改变了地址 
*O = c2;    //error,改变了指向的值


不是看了程序后更糊涂了吧,其实不用管何谓“指针常量”、何谓“常量指针”,问题的关键在于:const与*的位置;const *M=const(*M),所以值*M(值)不能被改变; * const N= *(const N),所以N(地址)不能被改变。

没有评论: