您的位置:首页 > 其它

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的指针时。 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: