c语言中auto,static,register,const,volatile,extern认识与理解
2016-09-02 17:42
501 查看
auto
auto关键字在我们写的代码中几乎是看不到的,但它却如此的重要,无处不在。它用来声明变量的生存期是自动的,即将不在任何类、结构、枚举、联合和函数中定义的变量视为全局变量,而在函数中定义的变量视为局部变量。编译器在默认的缺省情况下,所有变量都是auto,你就当他不存在吧。
static
修饰变量,他们都存在内存的静态区。
(1)修饰全局变量(静态全局变量):静态全局变量与其他的全局变量存在的位置一样,但它的作用域仅限于变量被定义的的文件中,其他文件即使用extern声明的也没办法使用它。可以说作用域从定义之处开始,到文件结尾处结束,再定义之处前面的代码也不能使用。
(2)修饰局部变量(静态局部变量):在函数体里面定义的,就只能在函数里用,其他的函数用不了。由于被static修饰的变量存在于静态区,当函数运行结束时,静态变量不会被销毁,函数下次使用的仍然能用到这个值。变量的生命周期变长。
修饰函数
函数前面加static使得函数成为静态函数,其作用域仅限本文件(内部函数)
使用内部函数,就不用担心自己定义的函。是否与其他文件的函数同名。
register 最快的关键字,register修饰的变量存在cpu的内部寄存器中,而不是通过内存寻址访问,提高了效率。注意是 尽可能,不是绝对。
register变量必须是一个单个的值,并且其长度应小于或等于整形的长度。而且register变量可能不存在内存中,所以不能取址“&“来获取变量的地址。
const
const修饰的变量为只读变量,具有不可变性。节省空间,避免不必要的内存分配,同时提高效率。编译器通常不为普通const只读变量分配存储空间,而是把他们保存在符号表中,这使它成为一个编译期间的值,没有存储与读内存的操作,使得效率提高。
1.修饰一般变量
2.修饰数组
3.修饰指针
4.修饰函数的参数
5.修饰函数的返回值
const修饰的函数的返回值不可被改变
volatile
volatile 是易变的,不稳定的意思。volatile修饰的变量表示可以被某些编译器未知的因素更改,比如操作系统、硬件或者其他线程等。编译器对该变量的代码就不再进行优化,从而可以提高对特殊地址的稳定访问。
extern
extern 外面的,外来的意思。可以置于函数前或变量前,标识变量或函数可能不存在与本文件中,而是定义在别的文件,提示编译器遇到此变量是在其他模块中寻找定义。
auto关键字在我们写的代码中几乎是看不到的,但它却如此的重要,无处不在。它用来声明变量的生存期是自动的,即将不在任何类、结构、枚举、联合和函数中定义的变量视为全局变量,而在函数中定义的变量视为局部变量。编译器在默认的缺省情况下,所有变量都是auto,你就当他不存在吧。
static
修饰变量,他们都存在内存的静态区。
(1)修饰全局变量(静态全局变量):静态全局变量与其他的全局变量存在的位置一样,但它的作用域仅限于变量被定义的的文件中,其他文件即使用extern声明的也没办法使用它。可以说作用域从定义之处开始,到文件结尾处结束,再定义之处前面的代码也不能使用。
(2)修饰局部变量(静态局部变量):在函数体里面定义的,就只能在函数里用,其他的函数用不了。由于被static修饰的变量存在于静态区,当函数运行结束时,静态变量不会被销毁,函数下次使用的仍然能用到这个值。变量的生命周期变长。
static int j; int fun1(void) { static int i=0;//static定义的局部变量i++后并不会销毁,函数下次继续使用 i++; } int fun2(void) { j=0;//j是static定义的全局变量,下次使用时还是+ j++; }
修饰函数
函数前面加static使得函数成为静态函数,其作用域仅限本文件(内部函数)
使用内部函数,就不用担心自己定义的函。是否与其他文件的函数同名。
register 最快的关键字,register修饰的变量存在cpu的内部寄存器中,而不是通过内存寻址访问,提高了效率。注意是 尽可能,不是绝对。
register变量必须是一个单个的值,并且其长度应小于或等于整形的长度。而且register变量可能不存在内存中,所以不能取址“&“来获取变量的地址。
const
const修饰的变量为只读变量,具有不可变性。节省空间,避免不必要的内存分配,同时提高效率。编译器通常不为普通const只读变量分配存储空间,而是把他们保存在符号表中,这使它成为一个编译期间的值,没有存储与读内存的操作,使得效率提高。
1.修饰一般变量
int const m=1; const int m=1;
2.修饰数组
int const arr[4]={1,2,3,4}; const int arr[4]={1,2,3,4};
3.修饰指针
const int *p;//p可变,p指向的对象不可变 int const *p;//p可变,p指向的对象不可变 int *const p;//p不可变,p指向的对象可变 const int* const p;//指针p和p指向的对象都不可变 //注:忽略类型名,const离哪个近。“近水楼台先得月”,里谁近就先修饰谁。
4.修饰函数的参数
void fun(const char str); //告诉编译器str不可被改变
5.修饰函数的返回值
const修饰的函数的返回值不可被改变
volatile
volatile 是易变的,不稳定的意思。volatile修饰的变量表示可以被某些编译器未知的因素更改,比如操作系统、硬件或者其他线程等。编译器对该变量的代码就不再进行优化,从而可以提高对特殊地址的稳定访问。
extern
extern 外面的,外来的意思。可以置于函数前或变量前,标识变量或函数可能不存在与本文件中,而是定义在别的文件,提示编译器遇到此变量是在其他模块中寻找定义。
相关文章推荐
- C语言中关键字auto、static、register、const、volatile、extern的作用
- C语言中的auto,register,static,const,volatile,extern
- C语言中auto,register,static,extern,volatile,restrict,const的区别
- C语言中的auto,register,volatile,extern,static,const
- C语言之auto、static、register、const、volatile、extern关键字
- C语言中关键字auto、static、register、const、volatile、extern的作用
- C语言中auto,register,static,const,volatile,extern的区别
- C语言中auto,register,static,const,volatile,extern的区别
- c语言auto、static、extern、register、volatile存储的理解
- C语言中auto,register,static,const,volatile,extern的区别
- C语言中关键字auto、static、register、const、volatile、extern的作用
- C语言中auto、register、static、const、volatile、extern的区别
- 简单介绍C语言中auto,register,static,const,volatile,extern等几个关键字的作用
- C语言中关键字auto、static、register、const、volatile、extern的作用
- C语言中关键字auto、static、register、const、volatile、extern的作用
- C语言中关键字auto、static、register、const、volatile、extern的作用
- C语言中关键字auto、static、register、const、volatile、extern的作用
- C语言中关键字auto、static、register、const、volatile、extern的作用
- C语言中volatile/register/const/static/extern/auto关键字的作用
- C语言中关键字auto、static、register、const、volatile、extern的作用