C语言-变量的类型
局部变量&全局变量
变量定义时有3种情况:
1- 函数的开头——只在函数内部有效。
2- 复合语句内——只在复合语句内才能引用。
for(int i=0;i<10;i++)
{
...//循环内容
}
3- 函数外部定义——外部变量/全局变量,能够被本文件的其他函数所公用。
C语言中,习惯上全局变量将第一个字母大写
float Max=0,Min=0;
int main()
{
...
}
不在必要的时候,不要使用全局变量,全局变量有如下缺点;
- 耗内存
- 可移植性变差
- 降低程序的可读性
如果出现了全局变量和局部变量同名的情况下,在局部变量的作用范围内,全局变量会被屏蔽。
静态变量(static)&自动(auto)变量
按照变量的生存期(存在时间)来区分变量的话,可以分为静态变量和自动变量。
内存中用户的存储空间使用情况是:
- 程序区
- 静态存储区
- 动态存储区
程序区存放程序
数据存放在静态存储区和动态存储区。全局变量均存放在静态存储区。局部变量中有使用static声明的变量是放在静态存储区的。其他的局部变量和形参放在动态存储区。
局部变量的存储类别:
- auto(若不额外声明均为auto类型,动态分配内存)
- static(函数调用结束后,该变量保持原值,下次调用不会初始化。且该变量不能被其他函数引用)
- register(将经常需要存取的局部变量存储在寄存器中,提高执行效率,现在计算机能够自动将使用频繁的数据放入寄存器中,所以无需指定)
全局变量的存储类别:
全局变量的作用域是从定义处到文件结尾。
如果想将作用于扩展为整个文件,需要在其他位置加上extern,起到扩展作用。
如果想将作用域扩展为其他文件,需要在其他文件中该变量定义处加上extern。
如果不想让该全局变量被其他文件使用,需要在前面加上static。
[1]: 《C语言程序设计》第四版 谭浩强