静态变量可能是内部的或外部的,具体取决于声明的位置。静态变量存储在初始化的数据段中。
内部静态变量: 内部静态变量定义为具有静态变量的变量,这些变量在函数内部声明并延伸到特定函数的末尾。
语法:
main( )
{
static datatype variable;
// other statements
}
示例:
// C program to demonstrate
// Internal Static Variables
#include <stdio.h>
int value();
int main()
{
printf("%d", value());
return 0;
}
int value()
{
static int a = 5;
return a;
}
输出结果:
5
外部静态变量:外部静态变量是在函数外部声明并为整个文件/程序全局设置的变量。
语法:
static datatype variable;
main()
{
statements
}
function1()
{
statements
}
示例:
// C program to demonstrate
// External Static Variables
#include <stdio.h>
int add(int, int);
static int a = 5;
int main()
{
int c;
printf("%d", add(a, c));
}
int add(int c, int b)
{
b = 5;
c = a + b;
return c;
}
运行结果:
10
内部静态变量和外部静态变量的区别:
参数 | 内部静态变量 | 外部静态变量 |
---|---|---|
关键字 | static | static |
链接 | 内部静态变量没有链接。 | 外部静态变量具有内部链接。 |
声明 | 内部静态变量在主函数中声明 | 外部静态变量在主函数之上声明。 |
比较 | 内部静态变量类似于自动(局部)变量。 | 外部静态变量类似于全局(外部)变量。 |
可见性 | 内部静态变量在特定函数中是活动的(可见性)。 | 外部静态变量在整个程序中都是活动的(可见性)。 |
Lifetime | 内部静态变量在函数结束前是活动的(lifetime)。 | 外部静态变量在整个程序中都是活动的(生命周期)。 |
范围 | 内部静态变量具有块范围的持久存储(仅在特定块或函数内工作)。 | 外部静态变量具有文件范围的永久存储(在整个程序中工作)。 |