static:1.改变变量的作用域,使变量只能作用域当前文件
2.改变函数的作用域,使函数只能作用域当前文件
3.修改局部变量,改变变量的生命周期,直到程序全部运行完才释放
extern:不是变量定义,可扩展外部变量作用域
const:修饰只读变量
const int a 和 int const a作用一样,表示a是一个常整型数
const int *a;a是一个指向常整型数的指针,整型数不可修改,指针可以修改
int *const a;a是一个指向整型数的常指针,整型数可以修改,但指针不可以
const int const *a const:a是一个指向常整型数的常指针,整型数和指针都不可以修改
列如:
const int x = 1;
此时x是不可变的,但可以用指针来修改
int* p = (int *)x;
*p = 2;
此时x的值就变成2了
int b=2;
int c=1;
const int *a1 = &b; a1是指针变量可以 a1 = &c;但*a1=1就不可以
int* const a2 = &b; a1是常指针变量,a2不能指向其他地址,但可以修改所指内容 *a2 = 2;
const int * const a3 = &b; a3既不可以指向其他地址,不可以修改所指内容
register:变量个数受限,且不能为long,double,float型
volatile:变量可以被程序以外的某个东西修改