手机版
你好,游客 登录 注册
背景:
阅读新闻

C语言const关键字学习

[日期:2014-01-04] 来源:Linux社区  作者:boyxulin1986 [字体: ]

C语言中const关键字用来修饰一个变量,它限定一个变量不允许被修改。
const int max_size = 5;

看起来使用const修饰的变量,和使用宏很类似,为何不直接使用宏呢?
#define MAX_SIZE (5)

这是因为和宏比起来:
1. const修饰的是一个变量,所以会在代码编译阶段进行语法检查。
而宏只会在预编译阶段进行简单的替换动作;
2. 使用const修饰的是一个变量,具有具体的数据类型,所以编译器会进行类型检查。
3. 可以保护被修饰的东西,防止意外的修改,增强程序的健壮性。
以常见的strcpy函数为例,
#include <string.h>
char *strcpy(char *dest, const char *src);
使用const修饰了char *src参数,这表示在strcpy函数内部是不能向src这个char指针指向的位置写入数据的。
如果有写入数据,则编译器就会报错。
4. 可以节省内存空间,避免不必要的内存分配。
因为const修饰的是变量,所以在内存中只有一份拷贝;
而宏定义只会在预编译阶段进行简单的替换动作,所以使用宏的地方都会被替换掉。

关于使用const的几个问题:
1. const int count = 10;
int array[count] = {0};
以上,编译器会报错。
原因是ANSI C规定数组定义时长度必须是常量;
而const修饰的仍然是一个变量。
2. const修饰内容的规则,特别要注意的是const修饰指针时很容易困惑人的.
(1)const char* src;----这里const修饰的是*src,即src指针指向的内容不能被修改,但指针本身可以随意指向;
(2)char* const src;----这里const修饰的是src这个指针,src指针指向了这个地方就不能动了,但是内容可以被修改。
所以关键点是:const只修饰其后的变量。
在(1)中,const修饰的变量是*src,*src是char类型数据;
在(2)中,const修饰的是src,src是char*类型数据。

再一次感觉到存储器空间布局的重要性,后面一定要找时间学习这一块。


 

推荐阅读

C++ 隐式类类型转化 Implicit Class-Type Conversions http://www.linuxidc.com/Linux/2013-01/78071.htm

C语言变长数组之剖析 http://www.linuxidc.com/Linux/2013-07/86997.htm

C语言需要注意的问题 http://www.linuxidc.com/Linux/2013-05/84301.htm

C语言位域的使用及其注意点 http://www.linuxidc.com/Linux/2013-07/87027.htm

C语言中简单的for循环和浮点型变量 http://www.linuxidc.com/Linux/2013-08/88514.htm

《C语言从入门到精通》.(王娣,韩旭 ).[PDF] + DVD视频光盘文件 http://www.linuxidc.com/Linux/2013-10/91775.htm

linux
相关资讯       C语言关键字  C语言const 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款