Chinaunix首页 | 论坛 | 博客
  • 博客访问: 733676
  • 博文数量: 192
  • 博客积分: 2653
  • 博客等级: 少校
  • 技术积分: 1623
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-31 18:25
个人简介

How tough life is, how strong you should be!

文章分类

全部博文(192)

文章存档

2015年(1)

2014年(2)

2013年(37)

2012年(152)

分类: C/C++

2013-09-24 14:19:46

转自:http://zhangzhenyuan163.blog.163.com/blog/static/858193892012625112248634/

 const是constant的缩写,是恒定不变的意思。被const修饰的值,是只读变量

1.const修饰只读变量,具有不变性
      #include

       int main()
      {
            const int Max = 100;
             int Array[Max];
   
              return 1;
       }

     在VC6.0中创建.c该文件,编译器会报错。因为我们定义数组必须指定其元素的个数,这也从侧面证实C语言中,const修饰的Max仍然是一个变量,只不过是只读属性罢了。
     const修饰的只读变量必须在定义的同时初始化

2.节省空间,避免不必要的内存分配,同时提高效率
    const推出的初始目的,是为了取代预编译指令,消除它的缺点,同时继承他的优点。可以看下他和define的区别
    编译器通常不为普通const只读变量分配存储空间,而是将他们保存在符号表中,这使他成为一个编译期间的值,没有了存储于读内存的操作,使得他的效率也提高

    #include

    #define M 3               //宏常量
   
   const int N = 5;          //此时并未将N放入内存中
   int main()
{
       int i = N;                  //此时为N分配内存 ,以后不再分配
       int I = M;                 //预编译期间进行宏替换,分配内存
       int j = N;                  //没有内存分配
      int J = M;                  //在进行宏替换,又一次分配内存
}

const定义的只读变量从汇编的角度来看,只是给出了对应的内存地址,而不是像#define一样给出的是立即数,所以,const定义的只读变量在程序运行过程中只有一份备份(因为它是全局的只读变量,放在静态区),而#define定义的宏常量在内存中有若干个备份。#define宏是在预编译阶段进行替换,而const修饰的只读变量是在编译的时候确定其值。#define宏没有类型,而const修饰的只读变量具有特定的类型。

3.const修饰变量
C语言深度剖析---const关键字 - engineerdream - engineerdream
先忽略类型名(编译器解析的时候也是先忽略类型名),我们看const离哪个近,“近水楼台先得月”,离谁近就修饰谁。
4.const修饰函数的参数
const修饰符可以修饰函数的参数,当不希望这个参数值在函数体内被意外改变时使用
 const void fun(const int i)
告诉编译器i在函数体内不能被改变,从而防止了使用者的一些无意的或者错误的修改
5.修饰函数的返回值
 const修饰符也可以修饰函数的返回值,返回值不可被改变
 在另一链接文件中引用const只读变量
extern const int i   ;  

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