老调重弹:const char*, char const* and char *const,摘自网络
摘自:http://www.cnblogs.com/jonnyyu/archive/2005/01/10/89766.html
const char*, char const*, char*const的区别问题几乎是C++面试中每次都会有的题目。
解释一:
事实上这个概念谁都有只是三种声明方式非常相似很容易记混。
Bjarne在他的The C++ Programming Language里面给出过一个助记的方法:
把一个声明从右向左读。
char * const cp; ( * 读成 pointer to )
cp is a const pointer to char
const char * p;
p is a pointer to const char;
char const * p;
同上因为C++里面没有const*的运算符,所以const只能属于前面的类型。
解释二:
char * const prt1 = stringprt1;
其中,ptr1是一个常量指针。
因此,以下赋值是非法的:ptr1 = stringprt2;
以下赋值是合法的:*ptr1 = "m";
因为指针ptr1所指向的变量是可以更新的,不可更新的是常量指针ptr1所指的方向(别的字符串)。
下面定义了一个指向字符串常量的指针:
const char * ptr2 = stringprt1;
其中,ptr2是一个指向字符串常量的指针。ptr2所指向的字符串不能更新的,而ptr2是可以更新的。
因此, *ptr2 = "x"; 是非法的,
而:ptr2 = stringptr2; 是合法的。
所以,在使用const修饰指针时,应该注意const的位置。
定义一个指向字符串的指针常量和定义一个指向字符串常量的指针时,const修饰符的位置不同,前者const放在*和指针名之间,后者const放在类型说明符前。
posted on 2013-04-14 11:44 Waaaaaall-E 阅读(149) 评论(0) 收藏 举报
浙公网安备 33010602011771号