c语言定义了四种存储属性即自动变量,外部变量,静态变量和寄存器变量
变量保存时间来分:从时间的角度,分为静态存储和动态存储两种情况。
变量作用域范围,从空间来分,全局变量和局部变量。
1.自动变量
函数中的局部变量,不声明为static,都是动态地分配存储空间的。调用该函数时,系统分配存储空间,函数结束时,自动释放存储空间。用auto声明。
2.外部变量(全局变量)
是在函数的外部定义的,作用域从变量定义处开始,到本程序文件的末尾。如果想在定义点引用外部变量,需用extern进行声明。
3.静态变量
函数的局部变量在函数调用结束后不消失而保留原值,用static声明。
局部变量和自动变量的区别
1.静态局部变量属于静态存储类别,在静态存储区内分配存储单元,整个程序运行期间都不释放。自动变量占动态存储区间。
2.静态局部变量在编译时赋初值,即只赋值(=号)一次;而自动变量每次调用重新赋值。
3.静态局部变量编译时自动赋值为0.或空字符。 自动变量,将是一个不确定的值。
4.寄存器变量。
将局部变量的值放在cpu寄存器内。
1.只有局部自动变量和形式参数可以作为寄存器变量
2.一个计算机寄存器数目有限
3.不能用&求寄存器变量地址