A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. const char *p
  2. char const *p
  3. char * const p
复制代码

这三个有什么区别呢?
前两个可以互换,它们声明了一个指向字符常量的指针,这意味着不能改变它所指向的字符的值。
char * const p声明了一个指向(可变)字符的指针常量,也就说你不能修改指针。

7 个回复

倒序浏览
好贴,但是最后一句有点迷糊。修改指针意味着什么?
回复 使用道具 举报
神贴。。点赞!
回复 使用道具 举报
本帖最后由 xiniuniu 于 2014-8-21 15:01 编辑

区分这几个指针的一个小技巧
const char *p
char const *p
char * const p
const char* const p

从*号开始 分开 左右两部分,*号在左侧一边

const char*     p             从右向左读     p 指向 const char*   // 指向常量的指针 指针可以修改,所指对象不能修改
char const*     p             从右向左读     p 指向  char const*  //指向常量的指针 指针可以修改,所指对象不能修改
char*        const p        从右向左读       const p 指向  char*    //常量指针 指针不能修改,所指对象可以进行修改
const char*    const p    从右向左读    const p 指向  const char* //指向常量的常量指针  指针和所指对象都不能进行修改


点评

我是统一向const的右边看。const 右边是*p,表示指针指向的对象不能改;const右边是p,表示指针指向不能改  发表于 2014-8-22 11:23
回复 使用道具 举报
cjfire 发表于 2014-8-21 09:28
好贴,但是最后一句有点迷糊。修改指针意味着什么?

char * const p = "i love c";

p = "c++"; //不可以。p为常量指针,一但给定了一个值之后在编译阶段就不允许再修改了
回复 使用道具 举报
xiniuniu 发表于 2014-8-21 15:03
char * const p = "i love c";

p = "c++"; //不可以。p为常量指针,一但给定了一个值之后在编译阶段就不 ...

请认真看帖仔细分析
回复 使用道具 举报
Meniny 发表于 2014-8-24 10:06
请认真看帖仔细分析

;P 哈哈哈!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马