关于修饰词const(伯纳乌的流浪猫).doc

关于修饰词const(伯纳乌的流浪猫).doc

ID:53037483

大小:32.16 KB

页数:3页

时间:2020-03-31

关于修饰词const(伯纳乌的流浪猫).doc_第1页
关于修饰词const(伯纳乌的流浪猫).doc_第2页
关于修饰词const(伯纳乌的流浪猫).doc_第3页
资源描述:

《关于修饰词const(伯纳乌的流浪猫).doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、const在编程中经常遇到,包括全局变量和局部变量的修饰,函数参数的修饰,函数返回值的修饰等,下面我们来一步步的回顾下有关const关键词的一些用意和疑问,并重新梳理一下const是何许人也?1.const修饰的只读变量必须在定义的同时初始化;因为如果没有被赋初值,那么变量被编译器分配了一个空间,并且赋给默认的一个值,一般是很大的一个负数,当我们再次给这个const变量赋值的时候就会出现错误,这个变量是只读的,一旦被赋值了就不能再改变了。 2.case后面不可以是const修饰的只读变量,因为case之后只能是常量;3.函数的参数中的有const关键字,例

2、如:voidfun(constint*a,constint*b){   statement;}这个参数不是定义,是声明而已,函数在调用的时候传递参数,同时给const变量赋值,这个过程是一个整体,而不是分化。另外,const告诉编译器,a,b的值在函数体内不能被改变。声明除了函数的参数外,还有一种关于const变量的声明:externconstinta;注意这里只是声明,而不是定义。 4.const和define的区别:const效率更高;const变量在编译期间,编译器通常不为它分配内存空间,而是将他们保存在符号表中,例如:#defineLEN3 //宏

3、常量constintMAX=5;//此时并未将MAX放入内存中....inti=MAX;//此时为MAX分配内存,以后不再分配intj=LEN;//预编译期间进行宏替换,为LEN分配内存intk=MAX;//不再为MAX分配内存intm=LEN;//再次进行宏替换,又一次为LEN分配内存 5.const修饰的位置不同意义也不同:(1)修饰一般简单只读变量:a.constinti=2;等同于intconsti=2;b.constinta[2]={0,1};等同于intconsta[2]={0,1};(2)修饰指针变量:a.constint*p;//p可以变,

4、p指向的对象不可变;b.intconst*p;//p可以变,p指向的对象不可变;c.int*constp;//p不可以变,p指向的对象可以变;d.constint*constp;//指针p和p指向的对象都不可以变;6.修饰函数返回值:例如:constintfun(void);表示函数的返回值是不能被改变的,函数是一个只读函数。拓展:有关const的几个疑问,从网上找了相关的答案,高人指点的很好,学习一下:1.存储位置:对于一个const类型的局部变量,真的是分配在“只读数据段”?还是和普通局部变量一样在栈上分配内存?解答:只读数据段仅是实现的其中一种方式,

5、目的是在运行时令试图修改const变量的行为产生错误。由于C标准并没有禁止对const变量的修改,而是规定属于未定义行为,因此一个实现对于试图修改const的行为如何处理都没有违反标准,也就是说,无论把const变量放在只读段也好,放在可被修改的地方也好(例如你说的栈),都是允许的行为。 2.生命周期:“只读数据段”,是和静态变量一样程序运行前就分配好内存,程序退出时才释放内存,生命周期是整个程序运行时间?解答:NO,只读数据段与生命周期无关。3.对于一个const类型的局部变量,如constinta=1;1这个值是在编译期间就确定的,还是到运行时才确定的

6、?解答:这要分抽象语义和实现语义,对于抽象语义,a必定是运行时才确定的,抽象语义才是a的本质;而对于一个实现,如果确定代码的其它地方并没有使用a的运行期信息,例如没有使用a的地址等,编译器也可以选择将a的值隐式作为字面值处理,即是说,编译器在实现a的语义时可以灵活处理,只要能表现出a的抽象语义即可。4.问题1,3对于const类型的全局变量呢?解答:问题1的处理是一样的,但全局变量不可能在栈中。而对于问题3,全局变量的值在编译期是确定的。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。