关于修饰词const(伯纳乌的流浪猫)_第1页
关于修饰词const(伯纳乌的流浪猫)_第2页
关于修饰词const(伯纳乌的流浪猫)_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

const 在编程中经常遇到 包括全局变量和局部变量的修饰 函数参数的修饰 函数返回 值的修饰等 下面我们来一步步的回顾下有关 const 关键词的一些用意和疑问 并重新梳 理一下 const 是何许人也 1 const 修饰的只读变量必须在定义的同时初始化 因为如果没有被赋初值 那么变量被编译器分配了一个空间 并且赋给默认的一个值 一 般是很大的一个负数 当我们再次给这个 const 变量赋值的时候就会出现错误 这个变量 是只读的 一旦被赋值了就不能再改变了 2 case 后面不可以是 const 修饰的只读变量 因为 case 之后只能是常量 3 函数的参数中的有 const 关键字 例如 void fun const int a const int b statement 这个参数不是定义 是声明而已 函数在调用的时候传递参数 同时给 const 变量赋值 这个过程是一个整体 而不是分化 另外 const 告诉编译器 a b 的值在函数体内不能被 改变 声明除了函数的参数外 还有一种关于 const 变量的声明 extern const int a 注 意这里只是声明 而不是定义 4 const 和 define 的区别 const 效率更高 const 变量在编译期间 编译器通常不为它分配内存空间 而是将他们保存在符号表中 例如 define LEN 3 宏常量 const int MAX 5 此时并未将 MAX 放入内存中 int i MAX 此时为 MAX 分配内存 以后不再分配 int j LEN 预编译期间进行宏替换 为 LEN 分配内存 int k MAX 不再为 MAX 分配内存 int m LEN 再次进行宏替换 又一次为 LEN 分配内存 5 const 修饰的位置不同意义也不同 1 修饰一般简单只读变量 a const int i 2 等同于 int const i 2 b const int a 2 0 1 等同于 int const a 2 0 1 2 修饰指针变量 a const int p p 可以变 p 指向的对象不可变 b int const p p 可以变 p 指向的对象不可变 c int const p p 不可以变 p 指向的对象可以变 d const int const p 指针 p 和 p 指向的对象都不可以变 6 修饰函数返回值 例如 const int fun void 表示函数的返回值是不能被改变的 函数是一个只读函数 拓展 有关 const 的几个疑问 从网上找了相关的答案 高人指点的很好 学习一下 1 存储位置 对于一个 const 类型的局部变量 真的是分配在 只读数据段 还是和普 通局部变量一样在栈上分配内存 解答 只读数据段仅是实现的其中一种方式 目的是在运行时令试图修改 const 变量的行 为产生错误 由于 C 标准并没有禁止对 const 变量的修改 而是规定属于未定义行为 因 此一个实现对于试图修改 const 的行为如何处理都没有违反标准 也就是说 无论把 const 变量放在只读段也好 放在可被修改的地方也好 例如你说的栈 都是允许的行 为 2 生命周期 只读数据段 是和静态变量一样程序运行前就分配好内存 程序退出时 才释放内存 生命周期是整个程序运行时间 解答 NO 只读数据段与生命周期无关 3 对于一个 const 类型的局部变量 如 const int a 1 1 这个值是在编译期间就确定的 还是到运行时才确定的 解答 这要分抽象语义和实现语义 对于抽象语义 a 必定是运行时才确定的 抽象语义 才是 a 的本质 而对于一个实现 如果确定代码的其它地方并没有使用 a 的运行期信息 例如没有使用 a 的地址等 编译器也可以选择将 a 的值隐式作为字面值处理 即是说 编 译器在实现 a 的语义时可以灵活处理 只要能表现出 a 的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论