您的位置:首页 > 其它

const和volatile的用法

2013-07-04 20:51 537 查看

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 Function(constunsigned char *str);//最常用的用法

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

2.    volatile的用法

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

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

使用原则:如果我们希望一个全局变量值就是真实的值,该值可能会被意外的改变。使用一般情况:1.中断函数对全局变量更新;2.对于映射到内存地址空间的寄存器;3.多线程编程中,多个线程共享的变量。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: