摘自: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放在类型说明符前。
原文链接: https://www.cnblogs.com/ant-wjf/archive/2013/04/14/3020081.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/84587
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!