没有时间把一件事情做好,却有时间把一件事情反复做!
全部博文(191)
分类: C/C++
2014-03-25 14:09:44
声明:本系列随笔主要用于记录c语言的常备知识点,不能保证所有知识正确性,欢迎大家阅读、学习、批评、指正!!你们的鼓励是我前进的动力。严禁用于私人目的。转载请注明出处:http://www.cnblogs.com/myblesh/
C语言中的变量可以有自己的属性。
在定义变量的时候可以加上属性关键字。
“属性”关键字指明变量的特有意义 。
下面分析常用的auto、register、static三个常用关键字。
auto即C语言中局部变量的默认属性
编译器默认所有的局部变量都是auto的
auto修饰的变量在栈空间分布。
指明变量的静态属性;
同时具有“作用域限定符”的作用;
static修饰的变量存储在静态数据区;
将变量存储于寄存器中;register只是请求寄存器变量,不一定每次都能请求成功;
Note:(1)register的变量必须是cpu可接受的变量值;(2)不能用&取地址符作用域于register修饰的变量
#include int main()
{ auto int i = 0; register int j = 0; static int k = 0; return 0;
}
#include void func1()
{ int i = 0;//在栈空间上分布,每次调用完释放
i++; printf("%d\n",i);
} void func2()
{ static int i = 0;//在静态数据区分配空间;等价于变量i只被初始化一次
i++; printf("%d\n",i);
} int main()
{ for(int i = 0;i<10;i++)
{
func1();
} for(int i = 0;i<10;i++)
{
func2();
} return 0;
}
auto变量存储在程序的栈中,默认属性;
static变量存储在程序静态区; static修饰的全局变量作用域只是声明的文件中;static修饰的函数作用域只是声明的文件中
register变量请求存储于cpu寄存器中,不在内存中,没有地址故不能用&;主要用于实时系统中,使用在运行速度要求很高的系统 。