全局变量:
- 作用域:在整个程序中都可见,从其定义的位置开始,直到程序结束。
- 存储位置:通常存储在程序的数据段中。
- 生命周期:从程序开始运行时创建,直到程序结束时销毁。
- 示例:
局部变量:
- 作用域:局限于定义它的函数或代码块内部。
- 存储位置:通常存储在栈上。
- 生命周期:在函数或代码块被执行时创建,函数或代码块执行结束时销毁。
注意:局部优先
static静态变量
静态变量具有以下特点和用途:
- 静态局部变量:
- 作用域局限于声明它的函数内部。
- 在函数多次调用之间,其值能够保持。
- 只会被初始化一次。
- 静态全局变量:
- 作用域限制在声明它的文件内部。
- 其他文件无法通过外部声明来使用它。
静态变量会保留上一次函数运行完后变量所得到的值
#include <stdio.h>
int m = 12;
int fun(int x,int y)
{
static int m = 3;
m = x * y - m;
return (m);
}
main()
{
int a = 7, b = 5;
m = fun(a, b) / m;
printf("%d\n", fun(a, b) / m);
}
运行结果:1
以下是对这段 C 语言代码的分析:
首先,定义了全局变量 m
并初始化为 12
。
在 fun
函数中,定义了静态局部变量 m
并初始化为 3
。
第一次调用 fun(a, b)
时,x = 7
,y = 5
,计算 m = 7 * 5 - 3 = 32
,并返回 32 。
然后,在 main
函数中,执行 m = fun(a, b) / m
,此时全局 m
参与运算,即 m = 32 / 12
,由于是整数除法,结果为 2 ,此时全局 m
的值被更新为 2 。
最后,再次调用 printf("%d\n", fun(a, b) / m);
,第二次调用 fun(a, b)
时,静态局部变量 m
仍然保持上一次的值 32 ,计算 m = 7 * 5 - 32 = 3
并返回 3 ,然后除以全局 m
的值 2 ,结果为 1 ,所以最终输出 1 。