4. C语言- - -全局与局部变量
1. 普通全局变量
概念:
int i;
int main()
{
i++;
return 0;
}
全局变量一般在文件开头定义(main()函数之前,函数之外)。
全局变量作用范围是在所有程序文件中都可以调用,不同文件之间调用使用( extern int i );注意声明时候不要赋值。
1.生命周期:
程序运行的整个过程,一直存在,直到程序结束。
2.注意:
定义普通的全局变量的时候,如果不赋初值,那么它的初值默认为0.
静态全局变量 static
概念: 定义全局变量的时候,前面用static修饰。
比如:
static int num; //num就是一个静态全局变量
int main()
{
num--;
return 0;
}
- 作用范围:
static限定了静态全局变量的作用范围,它只能在它定义的 .c 源文件中有效,不能跨文件使用,只能在该.c文件中使用。 - 生命周期: 在程序的整个运行过程中,它一直存在。
- 静态变量只初始化一次
注意:定义静态全局变量的时候,如果不赋初值,它的初值也默认为0.
3. 普通局部变量
1.概念 :
在函数背部定义,或者复合语句中定义的变量。
如果未初始化,则会随机分配初始化值。
2. 作用范围:
在函数中的定义的变量,在函数中有效。
在复合语句中定义的,在复合语句中有效。
- 生命周期:
在函数调用之前,局部变量不占用空间,调用函数的时候,才为局部变量开辟变量空间,函数运行结束了,局部变量就释放了。在复合语句中也是一样。
取个例子:
void fun()
{
int tum=9; //tum只能在fun()函数中使用。
printf("tum1 = %d", tum);
tum++;
printf("tum2 = %d", tum);
}
int main()
{
fun();
return 0;
}
4. 静态的局部变量
- 概念: 定义局部变量的时候,前面加static修饰。
2.作用范围:
在它定义的函数或复合语句中有效。
3.生命周期:
第一次调用函数到时候,开辟空间赋值,函数结束后,不释放空间,以后再次定义函数的时候,就不再为其开辟空间,也不赋初值,用的是以前的那个变量。
所以静态局部变量只会初始化一次,下一次直接跳过它的初始化语句,向下执行。
void fun()
{
int tum=9;
static int temp,mm; // temp,mm为 静态局部变量,不进行初始化默认值为0
printf("tum1 = %d,temp = %d\n", tum,temp);
tum++;
mm += 10;
printf("tum2 = %d,mm = %d\n", tum,mm);
}
int main()
{
fun();
fun();
fun();
return 0;
}