Chinaunix首页 | 论坛 | 博客
  • 博客访问: 128911
  • 博文数量: 38
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 191
  • 用 户 组: 普通用户
  • 注册时间: 2016-06-16 11:31
个人简介

嵌入式新人

文章分类

全部博文(38)

文章存档

2016年(38)

我的朋友

分类: 嵌入式

2016-07-23 17:42:53

const 和指针的组合

C语言中const 和指针的常见组合
const char *p;
char const *p;
char * const p;
const char * const p;
经常会混淆,这里来分析清楚。

2 理解const修饰的内容

理解这些组合的关键是清楚const修饰的是指针变量还是指针所指向的变量
const char *p;   const修饰的不是指针变量,而是定义了char型常量(指针所指向的常量),因此指针p仍是变量,只不过指向常量。
char const *p;   const修饰的不是指针变量,而是定义了char型常量指针所指向的常量,因此指针p仍是变量,只不过指向常量。
char * const p;  const修饰的是指针变量p,因此p变为常量,指向char型变量。

const char * const p;  第一个const定义了char型常量(指针所指向的常量),第二个const修饰的是指针变量p,因此p是常量,同时也指向char型常量

3 代码实例说明
从第2节可知,const与指针的4种组合实质上是3种含义(从存储单元单元角度理解,会更清晰,更透彻)。
const char *p; 和 char const *p;        指向常量的指针变量
char * const p;                                指向变量的指针常量
const char * const p;                        指向常量的指针常量

在GCC环境下编译下面的代码,会得到注释中错误,这些错误说明了我们上面的分析是正确的。

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. int main(void)
  3. {
  4. char a = 5;
  5. const char *p1;    // p1是指向(char)型常量的指针变量
  6. char const *p2;    // p2是指向(char)型常量的指针变量

  7. char * const p3;    // p3是指向(char)型变量的指针常量

  8. const char * const p4; // p4是指向(char)型常量的指针常量

  9. *p1 = 3;    // error: assignment of read-only location*p1’
  10. p1 = &a;    // 编译无错误无警告

  11. *p2 = 5;    // error: assignment of read-only location*p2’
  12. p2 = &a;    // 编译无错误无警告

  13. *p3 = 5;    // 编译无错误无警告
  14. p3 = &a;    // error: assignment of read-only variable ‘p3’

  15. p4 = &a;    // error: assignment of read-only variable ‘p4’
  16. *p4 = 5;    // error: assignment of read-only location*p4’

  17. return 0;
  18. }


阅读(1151) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~