- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
c语言const
c语言const:c++中const的使用方法
疯狂代码 http://CrazyC/ ĵ http:/CrazyC/VC/Article12811.html
1.const类型定义:指明变量或对象值是不能被更新,引入目是为了取代预编译指令
2.可以保护被修饰东西防止意外修改增强健壮性
3.编译器通常不为普通const常量分配存储空间而是将它们保存在符号表中这使得它成为个编译期间常量没有了
存储和读内存操作使得它效率也很高
4.可以节省空间避免不必要内存分配
例如:
#PI3.14159file://常量宏
constdoulbePi=3.14159;file://此时并未将Pi放入ROM中
doublei=Pi;file://此时为Pi分配内存以后不再分配!
doubleI=PI;file://编译期间进行宏替换分配内存
doublej=Pi;file://没有内存分配
doubleJ=PI;file://再进行宏替换又次分配内存!
const定义常量从汇编角度来看只是给出了对应内存地址而不是象#样给出是立即数所以const定义常量在运行
过程中只有份拷贝而#定义常量在内存中有若干个拷贝
对于基本声明
1.constr=100;//标准const变量声明加化默认内部连接所以必须被化其作用域为此文件编译器经过类型检查后
直接用100在编译时替换
2.extendconstr=100;//将const改为外部连接作用于扩大至全局编译时会分配内存并且可以不进行化仅仅作为
声明编译器认为在其他地方进行了定义
但是如果外部想链接r不能这样用
externconstr=10;//!常量不可以被再次赋值
3.constr={1,2,3,4};
structS{a,b;};
constSs={(1,2),(3.4)};//以上两种都是常量集合编译器会为其分配内存所以不能在编译期间使用其中值例如
:temp[r[2]];这样编译器会报告不能找到常量表达式
但是
constMax=100;
Array[Max];
正确
定义必须用常量可以用const或者#定义Static虽然是编译时确定也不能用来声明
对于指针和引用
1.const*r=x;//声明r为个指向常量x指针r指向对象不能被修改但他可以指向任何地址常量 [Page]
poerconst可以指定普通变量,用改指针不能修改它指向对象并不表示指向对象是const不能被改变例如:
i=10;
const*p=i;
*p=11;//wrong
i=11;//correct
自己个经验:个具体概念可以用范型概念来赋值但是个范型概念不能用具体概念来赋值
我们可以把const指针当成普通指针父类普通指针改写了const属性而具有比const指针更多功能这样话只有父
类指针可以指向子类而子类指针不能指向父类
2.const*r=x;//和使用方法1完全等价没有任何区别
3.*constr=x;//声明r为个常量指针他指向xr这个指针指向不能被修改但他指向地址内容可以修改
4.const*constr=x;//综合1、3使用方法r是个指向常量常量型指针
5.constdoublev;该引用所引用对象不能被更新
引用必须定义是话而且化后这个引用不能指向其他对象但是这里加const声明不是这个意思它是指不能改变v引
用对象本身也就是只能该对象里面const成员
对于类型检查
可以把个非const对象赋给个指向const指针有时候我们不想从这个指针来修改其对象值;但是不可以把个
const对象赋值给个非const指针这样可能会通过这个指针改变指向对象值但也存在使这种操作通过合法化写法
使用类型强制转换可以通过指针改变const对象:
constr=100;
*ptr=const_cast*(r);//C标准C语言使用:*ptr=(*)r;
对于
如char*name=“china”;这样语句在编译时是能够通过但是”china”是常量任何想修改他操作也能通过编译
但会引起运行时如果我们想修改话就要使用charname=“china”;这种形式
对于
1.voidFuction1(constr);//此处为参数传递const值意义是变量初值不能被改变
2.const
文档评论(0)