局部变量和全局变量的区别
1.作用域: ①全局变量:如果是在.c里面定义的话,作用域是整个.c文件。如果在.h里面定义的话,作用域是包含这个.h文件的所有文件里。当然在.c里面定义,然后再它的.h文件里使用extern的话,作用域也是包含这个.h文件的所有文件里。
②局部变量:作用于是整个函数,循环或者挎号里。
2.生命周期:①全局变量:整个程序的生命周期。
②局部变量:整个函数,循环或者挎号里。
3.存储位置:①全局变量:静态存储区
②局部变量:栈区
4.注意事项:①无论是局部变量还是全局变量都是不可以和宏定义重名的。
②当局部变量没有赋初值的时候,那么它的值是随机值。当全局变量没有赋初值的时候,其实它会自动赋初值为0.
③当在一个作用域里面的时候,局部变量和全局变量重名时,以局部变量为准。
④我们在一个文件里定义了一个全局变量,要是不想被其它的文件使用话可以加上static。这样这个全局变量的作用域就是这个源文件,在别的文件时无法使用的。
⑤在定义一个全局变量的时候,最好是在.c里面定义,然后再它的.h里面使用extern。直接再.h里面定义的话程序大了可能会产生重命名的情况,具体还是要看程序员怎么处理。
5.写个代码具体看一下(.cpp文件)
#include <stdio.h>
int global_num1=0; //生命周期:整个程序 作用域:该文件,和包含该文件的文件
static int global_num2=0; //生命周期:整个程序 作用域:仅仅该文件
int main()
{
int num3=0; //生命周期:整个main函数 作用域:整个main函数
{
int i=0; //生命周期:大跨号里 作用域:大跨号里
}
{
int i=0; //没有重名报错,证明前一个i已经消亡了
}
int num4=0; //生命周期:从该处开始,到main函数结束 作用域:从该处开始,到main函数结束
for (int i=0; i<5; i++) //生命周期:for循环里 作用域:for循环里
{
}
for (int i=0; i<5; i++) //没有重名报错,证明前一个i已经消亡了
{
}
return 0;
}
如有错误,望指正。