4.变量的分类
局部变量:
包含在代码块中的变量叫做局部变量。局部变量具有临时性。进入代码块,自动形成局部变量,退出代码块自动释放。
局部变量不初始化默认为随机值
代码块
代码块:用{}括起来的区域,就叫做代码块
main函数也是函数,也有代码块{}
全局变量
在所有函数外定义的变量,叫做全局变量。全局变量具有全局性。
全局变量不初始化默认为0 /NULL
例子
int g_val = 10; //g_val是全局变量
//main函数也是函数,也有代码块{}
int main()
{
int x = 10; //局部变量
{
int y = 20; //局部变量
}
// printf("%d\n",y); //err y只在上面的代码块内有效,出了代码块后自动释放 程序会报错:未定义标识符y
return 0;
}
变量的作用域
作用域概念:指的是该变量的可以被正常访问的代码区域
局部变量:只在本代码块内有效
全局变量:整个程序运行期间,都有效
例子
int g_x = 100; //全局变量
void show()
{
printf("show: 全局: %d\n", g_x); //在任何代码块中都可以被访问
}
int main()
{
show();
printf("main: 全局: %d\n", g_x); //全局变量在任何代码块中都可以被访问,甚至被修改
return 0;
}
当全局变量和局部变量同名时:局部优先
int g_x = 100; //全局变量
int main()
{
int g_x = 10; //局部变量,与全局同名
printf("g_x:%d\n", g_x); //10 输出的是局部,也就是局部和全部同名的时候,优先局部。所以,强烈不建议这样干
return 0;
}
变量的生命周期
生命周期概念:指的是该变量从定义到被释放的时间范围,所谓的释放,指的是曾经开辟的空间”被释放“
局部变量: 进入代码块,形成局部变量[开辟空间]。 退出代码块,"释放"局部变量
全局变量: 定义完成之后,程序运行的整个生命周期内,该变量一直都有效