本文主要是介绍【C语言天天练(一)】变量的类型限定词,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
引言:
上一节分析了变量的存储类型,除了存储类型外,还有类型限定词,如,const、volatile、restrict。描述如下。
1. 类型限定词const
对于一个用const关键字声明的变量,不能通过赋值、增量或减量运算来修改该变量的值。但可以初始化该变量的值。如:
const int nochange;
nochange = 12; // 不允许
const int nochange = 12; // 允许
const声明变量很简单,但若对于指针使用const声明时,应注意区分指针本身为const与指针所向的值为const区分开来。如:
const float *pf; // pf 指向一个常量浮点数值
float const *pfc; // 等同于const float *pfc;
float const *pf; // pt是一个指向常量的指针
一个位于*左边位置的const使得数据成为常量,而一个位于*右边的const使得指针自身成为常量。
常见用法:用const声明作为函数形式参数的指针。
void dispaly(const int array[], int limit); 该声明使得传递的形式参数指针所指的内容不能被改变。
2. 类型限定词volatile
限定词volatile告诉编译器该变量除了可能被程序改变外还可被其他代理改变。经常被用于硬件地址和其他并行运行的程序共享的数据。语法通const一样,如下:
volatile int loc;// lol1是一个易变的位置
volatile int *ploc; // ploc指向一个易变的位置
一个值可以同时是const 和volatile类型。声明顺序不重要:
volatile const int loc;
const volatile int *ploc;
一个变量可以即被const修饰,同时又被volatile修饰的原因是:被const声明的变量表明,该变量不能被本程序修改,但对于能否由其他地方修改却没有规定,比如可能被硬件终端修改。被volatile修饰的变量告诉编译器,不要优化该段代码,比如,访问某个变量时不要从寄存器中取值,要从内存中去取。
3.类型限定词restrict
关键字restrict通过允许编译器优化某几种代码增强了计算支持。它只可用于指针,并标明指针是访问一个数据对象的唯一且初始的方式。如:
int *restrict restar = (int *)malloc(10 * sizeof(int));
指针restar是访问由malloc分配的内存的唯一且初始的方式。
这篇关于【C语言天天练(一)】变量的类型限定词的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!