介绍
我们常常认识到局部变量是在函数内部的定义,全局变量实在函数外部定义没有{}圈住。
在认识这些概念时先明白
- 作用域
被定义的变量可用范围
- 生存期
被定义的变量存在范围
局部变量
函数内部的变量
- 未初始化调用时变量数据为随机数。
- 作用域定义开始到此函数}为止。如果函数中出现了{再次定义一个相同名字变量}会在此范围内隐藏
- 生存期定义开始到}为止。
#include<stdio.h>
int main()
{
int b;
int a;//此a
scanf("%d%d",&b,&a);
{
int a//彼a,在进入这个代码框时此a会被隐藏,彼a会
//开始定义a未赋值为随机数
a=10
}//出代码框后彼a会被释放内存消失此a会再次出现
printf("%d,%d",b,a);
return 0;
}
全局变量
定义在函数外部的变量
-
未初始化时变量为初始值为0
-
作用域从定义到程序运行结束当然如果函数内存在相同名字变量时会在这个变量作用域内隐藏
-
生存期从定义到程序运行结束
-
全局变量作用域可以扩大,用extern声明在要用.c文件内即可
-
当前.c文件内可以用static来定义只能在当前文件内使用,但这并不是静态变量仍然是全局变量,存在于内存静态存储区
#include<stdio.h>
int a;//此a=0
int main()
{
int b;
int a;//彼a(此a隐藏在彼a作用域)
scanf("%d%d",&b,&a);
printf("%d,%d",b,a);
return 0;
}
{
a=10;//全局变量a=10
}
局部变量的static
static加在局部变量定义之前代表静态变量
在第一次定义时分配内存空间,此后一直存在,即使函数消失也存在,但作用域还只是和一般局部变量一样,所以只有等到下一次函数再次执行时再次被使用,只是不再重新定义了。
#include<stdio.h>
int main()
{
int b,a=0;
f();
printf("%d,%d",b,a);//a=1
f();
printf("%d,%d",b,a);//a=2
return 0;
}
void f()
{
a++;
}