标签:ola 初始 关键词 没有 pre 顺序 赋值 span 修改
ANSI C 的类型限定词有const、volatile以及restrict三个,以下分别介绍三个限定词:
1、类型限定词const
(1)、如果变量中带有const关键字,则该变量无法进行赋值、增量及减量运算来修改改变量的值。
例如: const int nochange; //把nochange限定为常量
nochange = 12; //不允许
但是可以初始化:const int nochange = 12; //这是允许的
(2)、在指针和参量中使用const:
1 const float * pf; //pf可以改变,但pf指向的值不可改变 2 float * const pf; //pf只能指向一个唯一的地址,不可改变,但pf指向的值可以改变 3 const float * const pf; //pf与pf指向的值都不可改变
结论: 当 * 在const之前,意思是不变的是pf,也就是一个常量指针,表示pf不可变,pf指向的值可变;
当 * 在const之后,意思的是不变的是(*pf),所以pf可变,但pf所指向的值不可变。
(3)、对全局变量使用const:有两种情况
a、在一个文件中定义声明,在另一个文件中进行引用声明(关键词extern):
1 //file1.c 定义一个全局常量 2 const double PI = 3.14 3 const char * MONTHS[12] = 4 {"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"}; 5 6 // file2.c 使用在其他文件中定义的全局常量 7 extern const double PI; 8 extern const * MONTHS[];
b、将常量放在一个include文件中,这是必须使用静态外部存储类:
1 //constant.h 定义一些全局常量 2 static const double PI = 3.14 3 static const char * MONTHS[12] = 4 {"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"}; 5 6 // file1.c 使用在其他文件中定义的全局常量 7 #include "constant.h" 8 9 // file2.c 使用在其他文件中定义的全局常量 10 #include "constant.h"
注:使用头文件的好处就是不必惦记着在一个文件中进行定义声明,在下一个文件中进行引用声明:全部文件都包含在一个头文件中;缺点就是在于复制数据,若数据很大,这就回造成问题了
2、类型限定词volatile:
限定词volatile告诉编译器,该变量除了可被程序改变外,还可以被其他代理改变。
一个值可以同时被const和volatile修饰,表示不能由程序改变,但是可以被其他代理改变:
例如:volatile const int loc; //volatile和const 的顺序无所谓
3、类型限定词restrict:
关键字restrict允许编译器优化某几种代码以增加计算支持;它只可用于指针,并表明指针是访问一个数据对象的唯一且初始的方式。
例如:int * restrict restar = (int *) malloc(10 * sizeof(int)); //指针restar是访问malloc()分配内存的唯一且初始化的方式
例如:
1 int arr[10];int * par = arr; 2 for (n = 0; n < 10; n++){ 3 restar[n]+=5; 4 arr[n]+=3 5 restar[n]+=3; 6 par[n]*=2; arr[n]+=5; 7 }
其中restar是访问它所指数据块的唯一初始方式,所以可以用 restar[n]+=8代替。但是arr就不能,因为它不能确定有没有其他的指针改变了该处的值。
标签:ola 初始 关键词 没有 pre 顺序 赋值 span 修改
原文地址:https://www.cnblogs.com/TsnTse/p/9074968.html