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(地址)不能被改变。