网站大量收购独家精品文档,联系QQ:2885784924

c 中const作用.pdf

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
c 中const作用

Const 作用 1. const类型定义:指明变量或对象的值是不能被更新,引入目的是为了取代预编译指令 2. 可以保护被修饰的东西,防止意外的修改,增强程序的健壮性。 3. 编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期 间的常量,没有了存储与读内存的操作,使得它的效率也很高。 4. 可以节省空间,避免不必要的内存分配。 例如: #define PI 3.14159 file://常量宏 const doulbe Pi 3.14159; file://此时并未将Pi放入ROM中 double i Pi; file://此时为Pi分配内存,以后不再分配! double I PI; file://编译期间进行宏替换,分配内存 doublej Pi; file://没有内存分配 doubleJ PI; file://再进行宏替换,又一次分配内存! const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是象#define一样给出的是立即数, 所以,const定义的常量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中有若干个拷贝。 对于基本声明 1. constintr 100;//标准const变量声明加初始化,因为默认内部连接所以必须被初始化,其作用域为 此文件,编译器经过类型检查后直接用 100在编译时替换 2. extend const int r 100;//将const改为外部连接,作用于扩大至全局,编译时会分配内存,并且可 以不进行初始化,仅仅作为声明,编译器认为在程序其他地方进行了定义 但是如果外部想链接r,不能这样用 externconst int r 10; //错误!常量不可以被再次赋值 3.const int r[] {1,2,3,4}; struct S {int a,b;}; const S s[] {(1,2),(3.4)};//以上两种都是常量集合,编译器会为其分配内存,所以不能在编译期间使 用其中的值,例如:int temp[r[2]];这样的编译器会报告不能找到常量表达式 但是 const int Max 100; int Array[Max]; 正确。 还有 定义数组必须用常量,可以用const或者#define定义。Static 虽然是编译时确定,也不能用来声明数组。 对于指针和引用 1. const int *r x;//声明r为一个指向常量的x 的指针,r指向的对象不能被修改,但他可以指向任何 地址的常量 pointerconst 可以指定普通变量,用改指针不能修改它指向的对象,并不表示指向的对象是const不能被改 变,例如: int i 10; const int * p i; *p 11;//wrong i 11 ;//correct 自己的一个经验:一个具体的概念可以用范型的概念来赋值,但是一个范型的概念不能用具体的概念来赋值。 我们可以把const指针当成普通指针的父类,因为普通指针改写了const属性,而具有比const指针更多的 功能。这样的话只有父类指针可以指向子类,而子类指针不能指向父类。 2. int const *r x;//与用法 1完全等价,没有任何区别 3. int *const r x;//声明r为一个常量指针,他指向x,r这个指针的指向不能被修改,但他指向的地 址的内容可以修改 4. const int *const r x;//综合 1、3用法,r是一个指向常量的常量型指针 5. const double v; 该引用所引用的对象不能被更新 引用必须定义是初始话,而且初始化后这个引用不能指向其他的对象。但是这里加的const声明不是这个意 思,它是指不能改变v 引用对象本身,也就是只能调用该对象里面的const成员函数。 对于类型检查 可以把一个非const对象赋给一个指向const 的指针,因为有时候我们不想从这个指针来修改其对象的值; 但是不可以把一个const对象赋值给一个非const指针,因为这样可能会通过这个指针改变指向对象的值, 但也存在使这种操作通过的合法化写法,使用类型强制转换可以通过指针改变const对象: const int r 100; int * ptr const_castint*(r); //C++标准,C语言使用:int * ptr (int*)r; 对于字符数组 如char * name “china”;这

文档评论(0)

feixiang2017 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档