const/static/volatile随手记

const

1、由const定义的常量,没有写权限,只有读权限;

2、const定义的数据类型是透明的;

3、const用于封锁直接修饰的内容,该内容为只读,该变量不能作为左值;

static

有两个作用:1、修饰作用域(修饰全局变量/函数);2、修饰生存期(修饰局部变量)

static修饰静态全局变量,跟普通全局变量的不同是:其只能在源文件中使用,不能被其他源文件调用,作用域只在源文件中;

static修饰全局函数,作用域仅在此源文件中,不能在其他源文件被调用;

 

static修饰局部变量,与普通局部变量的不同是:

静态局部变量存储在静态区,普通局部变量存储在栈区;

静态局部变量在未初始化时,系统自动置零;初始化仅在函数初次调用时执行一次;

静态局部变量在函数执行完成后不会释放,其生存期为整个程序运行期,并能保存上次调用的值。

volatile

volatile确保本条指令不会因为编译器的优化而省略。

volatile int *p;
int a,b;
a=*p;
b=*p;

没有volatile,系统将内存上*p的地址读取保存到寄存器,幅值给a,再从寄存器读取*p的地址幅值给b(无法跟踪内存上状态的变化);

有volatile,系统每次幅值都必须从内存上进行*p的读取(如果*p指向的内存为硬件设备,那其硬件状态可能会随时改变)。

例子

1、并行设备的硬件寄存器(状态寄存器:有无溢出、允许中断、有无进位);

2、一个中断服务子程序中会访问的非自动变量;(全局变量或声明为static的局部变量,存储在动态存储区)

3、多线程应用中被几个任务共享的变量。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值