register,static,extern,const,typedef,volatile关键字
2016-07-27 19:42
411 查看
一.register
用register修饰的作用:
请求编译器尽可能(CPU寄存器资源有限)将变量的值保存在CPU内部寄存器中,省去了CPU从内存中抓取数据的时间,提高了程序的运行效率。
何时用register修饰变量?
将频繁使用的变量声明为register变量。
注意事项:①register只能修饰局部变量,不能修饰全局变量和函数(全局变量可被多个程序访问,只有当前程序知道register在哪)。
②不能用&获取register修饰的变量的地址(&获取的是保存在内存中的变量的地址,而register修饰的变量保存在寄存器中)。
③register修饰的变量类型需要是CPU接受的数据类型。
二.static:可修饰变量(包括局部变量和全局变量),也可修饰函数。
用static修饰的作用:
①修饰局部变量:延长局部变量生命周期到程序结束。
②修饰全局变量:静态全局变量只能在本文件被访问,不能在其他文件被访问。
③修饰函数:静态函数只能在本文件被调用。
④static修饰的变量保存在数据区的静态数据区,如果变量没有初始化,系统默认将其初始化为0。
三.extern:
用extern修饰的作用:声明某个已经在其他文件被定义的全局变量。
注:声明变量要加类型。
四.const:
用const修饰的作用:将修饰的变量标明为只读变量。
const修饰的变量对应的空间可变,但不能通过修饰的变量名来修改对应空间的值。
何时用const修饰变量?
一般用const修饰函数形参,防止在函数的实现过程中修改实参对应的值。
注:const修饰一个变量时,要对变量进行初始化(后面不能再通过const修饰的变量名修改其对应空间的值)。
五.typedef:为数据类型重命名。
为数据类型重命名的作用:
①提高代码的移植性。
②方便定义变量(把复杂的变量名简化),提高编程效率。
③起到解释变量的作用。
六.volatile:
用volatile修饰的作用:优化器在用到volatile修饰的变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。
(1). 一个参数既可以是const还可以是volatile吗?解释为什么。
答:是的。一个例子是只读的状态寄存器。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它。
(2). 一个指针可以是volatile 吗?解释为什么。
答:是的。尽管这并不很常见。一个例子是当一个中服务子程序修该一个指向一个buffer的指针时。
用register修饰的作用:
请求编译器尽可能(CPU寄存器资源有限)将变量的值保存在CPU内部寄存器中,省去了CPU从内存中抓取数据的时间,提高了程序的运行效率。
何时用register修饰变量?
将频繁使用的变量声明为register变量。
注意事项:①register只能修饰局部变量,不能修饰全局变量和函数(全局变量可被多个程序访问,只有当前程序知道register在哪)。
②不能用&获取register修饰的变量的地址(&获取的是保存在内存中的变量的地址,而register修饰的变量保存在寄存器中)。
③register修饰的变量类型需要是CPU接受的数据类型。
二.static:可修饰变量(包括局部变量和全局变量),也可修饰函数。
用static修饰的作用:
①修饰局部变量:延长局部变量生命周期到程序结束。
②修饰全局变量:静态全局变量只能在本文件被访问,不能在其他文件被访问。
③修饰函数:静态函数只能在本文件被调用。
④static修饰的变量保存在数据区的静态数据区,如果变量没有初始化,系统默认将其初始化为0。
三.extern:
用extern修饰的作用:声明某个已经在其他文件被定义的全局变量。
注:声明变量要加类型。
四.const:
用const修饰的作用:将修饰的变量标明为只读变量。
const修饰的变量对应的空间可变,但不能通过修饰的变量名来修改对应空间的值。
何时用const修饰变量?
一般用const修饰函数形参,防止在函数的实现过程中修改实参对应的值。
注:const修饰一个变量时,要对变量进行初始化(后面不能再通过const修饰的变量名修改其对应空间的值)。
五.typedef:为数据类型重命名。
为数据类型重命名的作用:
①提高代码的移植性。
②方便定义变量(把复杂的变量名简化),提高编程效率。
③起到解释变量的作用。
六.volatile:
用volatile修饰的作用:优化器在用到volatile修饰的变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。
(1). 一个参数既可以是const还可以是volatile吗?解释为什么。
答:是的。一个例子是只读的状态寄存器。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它。
(2). 一个指针可以是volatile 吗?解释为什么。
答:是的。尽管这并不很常见。一个例子是当一个中服务子程序修该一个指向一个buffer的指针时。
相关文章推荐
- Codeforces Round #218 (Div. 2) C. Hamburgers【二分】
- c++ 初始化列表
- 数据结构与算法概述
- baseAdapter
- 我的蓝灯lantern邀请码!免费上外网
- WebSocket 是什么原理?为什么可以实现持久连接?
- mark工作一周年
- setXfermode中PorterDuff.Mode
- 开博第一篇
- Android Studio2.0 教程从入门到精通Windows版 - 提高篇
- 大数取模
- JQuery面试题1
- LAMP平台部署及应用二(编译安装)
- Hadoop-2.6.0安装文档
- hdoj2141Can you find it?
- Git学习(2)
- Ubuntu14.04安装apt-get方法Lnmp环境
- 显示display元素常见属性整理
- Android 布局
- 进程通信之文件读写