const、volatile和restrict的作用和用法总结
2016-05-20 本文已影响215人
胡哈哈哈
const
const(constant)关键字可修饰变量、函数参数、返回值或函数体。
- 定义只读变量。
- 限制函数参数。防止意外修改。增加程序安全性和可靠性。
- 如
const char *p
表示,p指针指向的值不可更改,就是这个指针不能用来修改数据 - 如
char *const p
表示,p指针指向的地址不可更改 - 如
const int arr[]
则数组内的值都不能修改 -
const char *const p
表示,所指向的数值和地址都不能变 const double locked[4]
double *pc=rates
-
pc=locked
这句是非法的。因为locked是不能修改的
- 如
源文件中使用const int i = 1
则在其他文件中应使用extern const int i
,如在头文件中则应用static const int i = 1
,因为各文件中需要包含这个头文件,需要static保证内部性。但如果用此方法存储数组,因为各个文件都需要创建这个静态数组,可能会占用较多的存储空间,需要从更多方面去考虑它的利弊。
volatile
volatile限定词则表示变量除了可被程序修改外还可能被外部代理修改,如变量保存当前的时钟时间。
编译器优化编译时会把不变的值放在寄存器,以供读取,标记volatile可以保证不被放入寄存器。
如不能被程序改变而能被代理改变则const volatile int i
。
restrict
restrict只能用于指针int* restrict ptr
,这样就使得ptr是指向某数据块的唯一方式。
可防止数据被其他指针操作。如在memcpy中为防止有重叠区域,采用restrict修饰传入的指针。同时,restrict也有利于编译器优化。