register,static,const,extern,typedef,volatile的详讲
来源:互联网 发布:大数据挖掘工程师招聘 编辑:程序博客网 时间:2024/06/14 00:47
1.register
修饰经常被访问的变量,它所修饰的变量,请求编译器的尽可能的将变量保存在cpu的寄存器中。这样有助于减少访存的时间
有助于程序的效率。
它所修饰的变量不能用&地址,因为&这个是取的是内存空间的的地址,但是register 修饰的的变量保存在寄存器里面。
还有register只能修饰cpu能够接受的类型,例如cpu是不能进行浮点类型的计算。
register修饰的是局部变量不能修饰全局变量,因为只有这个进程知道这个变量的在哪里保存着,而其它的进程不知这个
变量保存的地方。
2.static
static不仅可以修饰变量还能修饰函数
修饰变量的时候,能修饰局部变量和全局变量。
修饰局部的变量,主要是为延长变量的生命的周期,需要延长生命周期的的变量不定义成全局变量,这是因为全局变量谁都
可以访问,容易被修改。
修饰全局变量的时候,使这个全局变量只能在这个文件中使用,也有助于其他文件对于这个变量名重新定义。
修饰函数的时候,也是是这个函数只能在本文件里面调用,其它文件不能调用。
被static修饰的变量保存在内存的数据段中的data段里面,只有在程序结束的时候,空间才会释放。
3.const
const修饰的变量名,是只读变量,
什么是只读变量:
const int num = 5;
num = 6;//这是错误的,
int *p = #
*p = 6;
这样是可以的,所以constz修饰的变量只是不能通过变量名字来改变其值,但是空间里面的值是可以被改变的
const int *p;
int * const p;
这两个是不一样的,一个是*p不能被改变,下面一个是p不能被改变。(就近原则)
const主要的用途是函数传参的时候,修饰形参的。因为在函数传参的时候,容易照成错误的通过修改的形参的值从而来
修改到实参的值。
举个例子:strcpy这个函数 函数的声明 char * strcpy(char *dest,const char *src );这个函数只需要将src字符串
拷贝给dest就好了,只需要只读,不需要改变,一旦在函数在定义的时候,一旦改变了*src,那么编译器会直接的报错。
防止在赋值的时候,做了其它的操作修改原来的字符串。
4.extern
extern int count;
这个含义是说明count在其它的文件里面定义过,再用extern的时候需要标明其变量的数据的类型;
extern也可以修饰函数,也需要标明函数返回值,以及参数的类型。
5.tpyedef
是帮一个复杂的声明定义取一个简单的名字(简单不失越短越好,有时候起到一定的注释代码的作用,可以取多个名字)
,可以理解为取别名,
俗一点的说,你大名叫上官阳阳,但是人家里面,家里人叫你的小名阳阳,同学有时候叫你啊阳,代表的是同一个人。
主要的好处:
1.提高了代码的移植性。例如你在一个很长的代码里面多次用到unsigned char 取名字为Char ,突然有一天需要变成
signed char的时候,只需要,将typedef unsigned char Char,改为typedef signed char Char
2.方便在编程中起名字的话,起到一个注释的作用(一个声明定义可以取多个名字)
3.方便简化变量的定义,例如一个结构体,你每次用它需要两个单词,但是typedef以后为一个单词。
注意一下,toyedef后面需要加分号,#define后面不需要加分号,不要搞混了。
6.voatile
提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,
都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,
如果这个变量由别的程序更新了的话,将出现不一致的现象。
注意使用volatile的时候不用使用编译优化。
注:对于现在的我来说可能详讲。
- register,static,const,extern,typedef,volatile的详讲
- 关键字:register static extern const typedef volatile
- register,static,extern,const,typedef,volatile关键字
- C关键字 register extern const static volatile typedef 逐一浅析
- register,static,const,volatile,extern
- Linuxc编程的常用关键字 register ,static ,extern ,const ,typedef
- 关键字的作用 static,extern,const,volatile,register,inline
- auto/static/register/const/volatile/extern
- 关键字auto、static、register、const、volatile、extern
- auto register static const volatile extern
- 关键字auto、static、register、const、volatile 、extern
- auto、static、register、const、volatile 、extern 总结
- auto、static、register、const、volatile 、extern
- auto、static、register、const、volatile 、extern
- C++ 关键字 static register const volatile extern
- volatile、static、register、extern、auto和const
- C++关键字(static/register/atuo/extern/volatile/const/inline/define/typedef)
- volatile,register,static,extern的用法
- synchronized关键字
- SpringMVC Interceptor
- Ubuntu 16.04更新软件提示"需要安装不能信任的软件包" http://archive.ubuntukylin.com:10006/ubuntukylin xenial InRelease
- Tarjan模板题求割点,桥
- 一个多层级节点用户树的设计构思
- register,static,const,extern,typedef,volatile的详讲
- 堆排序
- 最长公共子序列求解:递归与动态规划方法
- Drupal7 配置经验整理
- Android三种基本的加载网络图片方式
- ubuntu之find方法
- Java挑战高并发(2):线程中断
- Java源码-色彩认知小程序(中英对照)
- 【学习笔记】Redis(5)-排序