前言
`
一.变量
在介绍全局变量和局部变量之前必须先弄清楚什么是变量
-
定义:在内存中分配空间,用来保存数据的。
-
定义格式:数据类型 变量名;
例如:
int i=0;
float abc = 1.2;
二、局部变量和全局变量
- 首先我们来介绍几个定义----
- 代码块: 代码块是指{}所包含的区域。
{
//这里就是代码块
}
- 生命周期:该变量从被定义到释放的范围(强调时间)
- 作用域:可以正常访问改变量的范围
1.局部变量:在代码块中定义的变量(具有临时性)
目前网上大部分文章对局部变量的定义的都是说函数体内定义的变量,其实这种说法是不严谨的,不一定非得是函数,只要是代码块中的变量都是局部变量。
(示例):
int main()
{//-1
{//-2
int a=0;
}
int j=0;
}
j是main函数中的局部变量,而a是括号2的局部变量
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int x = 2;
int main()
{
{
int a = 0;
}
int j=0;
printf("%d", a);
return 0;
}
而此时系统会报错
错误(活动) E0020 未定义标识符"b"
a的作用域是括号2,生命周期在括号2内,进入括号2生成,出去销毁,出了大括号无法访问b。
j的作用域是main函数,j的生命周期在main函数{}内即进入括号,就自动生成,一旦出了括号,就自动销毁。
2.全局变量:在函数体外定义的变量。(具有全局性)
代码如下(示例):
int x=0;
int main()
{
int a=9;
}
- x是在函数体外定义的变量,即为全局变量。
- 全局变量的作用域是整个程序
- 生命周期是从程序开始运行到结束
也就是说在全部变量定义之后程序任何地方都可以访问该全局变量
3.当全局变量和局部变量重名问题
int x = 2;
int main()
{
{
int x = 0;
printf("%d\n", x);
}
printf("%d\n", x);
return 0;
}
那么这种情况结果是多少呢?
答案是
0
2
因为当全局变量和局部变量同名时,在局部变量的作用域内,局部变量会覆盖掉全局变量,而出了局部变量作用域,局部变量销毁,输出全局变量。
总结
以上就是全局变量和局部变量深入分析,并且局部变量是分配在栈区的,而全局变量是分配在全局(静态)存储区。