const和volatile的用法

1.    Const的用法

任何变量的声明都可以使用const限定符限定。该限定符指定变量的值是不能被修改的。

一般情况下,const限定范围都是指针所指向的的类型,如:

const unsignedchar *str;

unsigned charconst char *stt;

特殊情况是const限制指针变量本身不能修改,也就是地址固定。如:

unsigned char *const str ;

const在单片机变成中一般只能用作修饰一个局部变量不可修改,如:

const unsigned intNUM = 2 ;

在《C专家编程》书中描述函数参数的传递过程类似于赋值的过程

要使赋值语句合法,必须满足一下条件:

两个操作数都是指向有限定符或无限定符的相容类型的指针,左边的指针所指向的类型必须具有右边指针所指向的类型的全部限定符。如:

char *cp;

const char *cp ;//const限定cp所指向的内容是不可修改的

ccp = cp ;

是合法的。

在函数中的应用:

Void Functionconstunsigned char *str;//最常用的用法

该函数对于传入的参数指针所指向的内容限定是不可修改的。但是指针地址是可以改的,其目的就是保证代码的健壮性。

2.    volatile的用法

由于变量申请在RAM里面,被编译器优化以后,一开始的时候被拿到cpu工作寄存器中,以至于对后来该变量的访问,是从cpu寄存器中读取的而不是到内存中,虽然执行速度得到优化,但有可能造成数据出错。加上volatile就是告诉编译器,对这个变量不进行优化,访问该变量时还是到变量指定的地址访问。一般用在寄存器变量的地址定义上。如:

#define GPFCON  (*(volatile unsigned int *)5000)

使用原则:如果我们希望一个全局变量值就是真实的值,该值可能会被意外的改变。使用一般情况:1.中断函数对全局变量更新;2.对于映射到内存地址空间的寄存器;3.多线程编程中,多个线程共享的变量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值