用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字

德良    -  云代码空间

—— Coding是一种生活!

关于 const char* p , char const* p 以及 char * const p

2014-12-06|1879阅||

摘要:关于 const char* p , char const* p 以及 char * const p

七、Bjarne在他的The C++ Programming Language里面给出过一个助记的方法: 把一个声明从右向左读

1、const char* p    读作:p is a pointer to const char

char const* p和上面一样;

char * const p   读作:p is a const pointer to char

 

2、const char* p和char const* p中const 修饰的是(*p),所以(*p)是cons t,而p非const;

char * const p中const修饰的是p,所以p是const;

3、const char* p : 因为const 修饰符在 * 号前面,因此const 修饰的是 (*p),因此p指向的字符串是const的.

char const* p : 等价于const char* p, 因为const 修饰符在 * 号前面,因此const 修饰的是 (*p),因此p指向的字符串是const的.

char* const p: const修饰的是变量p,而变量p是 char* 类型的,所以这个char* 变量本身是const,它的值初始化后就不能变了.

4、判别const 类型的方法是,第一步将变量类型关键字去掉,第二步再看const修饰的变量类型.

因此,很明显,对于 const char c , char const c, 两者去掉类型关键字后变成 const c, 因此两者等价,变量c 是const 类型的.

对于 const char* p , char const* p ,两者去掉类型关键字后变成 const *p,两者也等价,(*p) 是const 类型的, 而p是非const 的. p 和 (*p) 是什么呢? p 是 char* 类型的变量,非const, (*p) 是字符串内容,const.

由上分析,很显然对于char* const p, 去掉类型关键字后变成 * const p, 因此p是const,而(*p)是非const的.

顶 0踩 0收藏
文章评论
    发表评论