const关键字和常量.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
const关键字和常量.docx

C语言中的常量跟用const关键字声明的变量比较容易混淆,?使用const关键字声明的变量严格来说不是常量,?只能说是只读变量而已.一般使用const关键字声明一个只读变量可以使用以下的方式:const?type varname;或者type?const?varname;?例如:const?int?ivar;或者int const?ivar;?const long?lvar;或者long const?lvar;?好了,?当我们声明以了个只读变量后,?试图去修改变量的值会有什么问题呢?看看以下代码:#include?stdio.h#include?stdlib.h?int?main() {??const?int?ivar = 10;??ivar = 12;??return?0;}?然后我们编译这个程序,?出现以下错误:可以从错误中看出,?我们不能修改一个只读变量.?但是为什么说只读变量不是常量呢??我们上章说过常量,?常量是不能修改的,?如12, c等这些是常量,?我们不能修改他们的值.但是刚刚我们上面的程序也不能修改他们的值啊??嗯,?真的不能修改吗??再看看下面的程序:#include?stdio.h#include?stdlib.h?int?main() {??const?int?ivar = 10;??int?*ip;???printf(ivar: %d\n, ivar);???ip = ivar;??*ip = 12;???printf(ivar: %d\n, ivar);???return?0;}输出:?嗯,?我们发现ivar的值已经被修改了,?所以只读变量不是真的只读,?可以同其他的路径去修改他的值.?另外再看一个只读变量跟常量的区别,?看代码:#include?stdio.h#include?stdlib.h?#define?SIZE1 10const?int?SIZE2 = 10;?int?main() {??int?array1[SIZE1];???int?array2[SIZE2];???return?0;}?编译结果:从编译结果中可以看到,?第9行出错了,?错误是数组array2不确定大小.?而使用常量就没有这种错误,?所以可以看出只读变量不是常量.?那么只读变量有什么用呢??一般使用只读变量可以防止自己以外修改变量的值而造成错误.?另外只读变量不是常量,?而是变量,?我们可以通过其他的渠道去修改只读变量的值,?因为只读变量是在编译期间,?编译器做的处理,?主要看看你的代码有没有修改到只读变量的值.?所以只要隐式的修改只读变量的值,?编译器是不会发现的,?就像上面的程序一样.?===========================================================================另外只读变量还有一些高级的用法,?因为现在还没有讲到指针,?所以以下内容可以等到讲完指针再回头看.?我们上面介绍了只读变量的声明方式了,?现在重温一下,const?type varname;或者type?const?varname;?那么我们要声明一个int指针类型的只读变量怎么声明呢??看下面的声明方式:int?*?const?iptr;//(1)?这次我们使用了第二种的声明方式,?如果使用第一种声明方式应该怎样呢??按声明方式看应该是以下这样:const int?*iptr;//(2)?嗯,?这样正确吗??答案是否定的,?因为*运算比const高级,?所以上面的声明等于下面的声明:const int?(*iptr);//(3)?本来我们想声明一个int *类型的只读变量,?现在却变成了声明一个int类型的指针只读变量.?明显不是我们想要的结果.?(1)??声明的iptr是不能修改的,?而(2)声明的是(*iptr)不能修改,?那么他们有什么区别?(1)声明的iptr是指针,?而(2)声明的iptr也是指针,?但是是有区别的,?因为(1)声明的是iptr不能修改,?就是这个指针值不能修改,?而(2)声明的是iptr指向的值不能修改.?这样说可能有点难懂,?看代码:#include?stdio.h#include?stdlib.h?int?main() {??int?*?const?iptr1;??const?int?*iptr2;???iptr1 = 100;??*iptr2 = 100;???return?0;}?编译信息:可以看出,?第8和第9行都出错了,?原因是修改了只读变量的值.?那我们现在修改一下程序:#include?stdio.h#include?stdlib.h?int?main() {??int?*?const?iptr1;??const?int?*iptr2;??

文档评论(0)

zhoujiahao + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档