Cprogramming 简明教程
Static Variables in C
默认情况下, C variable 被归类为 auto storage type 。静态变量可用于在调用不同函数之间保留某个值。静态变量还用于存储应该在多个函数之间共享的数据。
Features of Static Variables
以下是 C 编程语言中静态变量的一些特性 −
-
编译器在计算机的主内存中为静态变量分配空间。
-
与 auto 不同,静态变量初始化为 0 而不是垃圾。
-
如果静态变量是在函数内声明的,那么在每次函数调用时都不会对其重新初始化。
-
静态变量具有局部作用域。
Declare a Static Variable
要在 C 语言中声明一个静态变量,请使用 static 关键字并赋予初始值。以下是声明静态变量的语法:
static datatype var = value;
Here ,
-
datatype 表示变量的类型,如 int、char、float 等。
-
var 是用户给定的变量名称。
-
value 是赋予给变量以进行初始化的任何值。默认情况下,它为零。
Examples of Static Variables in C
Example: Using Static Variable
下面是您如何在 C 语言中使用静态变量的一个示例 −
#include <stdio.h>
int main(){
auto int a = -28;
static int b = 8;
printf("The value of auto variable: %d\n", a);
printf("The value of static variable b: %d\n",b);
if(a != 0)
printf("The sum of static variable and auto variable: %d\n",(b+a));
return 0;
}
当你运行这段代码时,它将产生以下输出:
The value of auto variable: -28
The value of static variable b: 8
The sum of static variable and auto variable: -20
Example: Create Counter Function W/O Using Static Variable
在这个示例中, x 默认情况下是一个自动变量,并在每次调用 counter() 函数时初始化为 0。在每次后续调用中,它都会重新初始化。
#include <stdio.h>
int counter();
int main(){
counter();
counter();
counter();
return 0;
}
int counter(){
int x;
printf("Value of x as it enters the function: %d\n", x);
x++;
printf("Incremented value of x: %d\n", x);
}
运行代码并检查其输出:
Value of x as it enters the function: 0
Incremented value of x: 1
Value of x as it enters the function: 0
Incremented value of x: 1
Value of x as it enters the function: 0
Incremented value of x: 1
然而,当 counter() 函数中的变量 x 声明为 static 时,它会在首次调用 counter() 函数时初始化为“0”。在每次后续调用中,它不会重新初始化。相反,它会保留较早的值。
Example: Create Counter Using Static Variable
将“x”的声明更改为“static int x = 0;”并再次运行该程序 −
#include <stdio.h>
int counter();
int main(){
counter();
counter();
counter();
return 0;
}
int counter(){
static int x = 0;
printf("Value of x as it enters the function: %d\n", x);
x++;
printf("Incremented value of x: %d\n", x);
}
现在,当您运行这段代码时,它将生成以下输出 −
Value of x as it enters the function: 0
Incremented value of x: 1
Value of x as it enters the function: 1
Incremented value of x: 2
Value of x as it enters the function: 2
Incremented value of x: 3
Passing Static Variable to Function
您可以将静态变量传递给函数。但是,形式参数不能声明为静态,因为 C 将函数参数用作函数内部的局部自动变量。
Example
在此代码中,我们向 function 传递了一个静态变量。但是,其值的变化不会反映在调用函数中。
#include <stdio.h>
int myfunction(int x);
int main(){
static int x = 5;
myfunction(x);
printf("in main - x:%d\n", x);
return 0;
}
int myfunction(int x){
x++;
printf("Incremented value of x: %d\n", x);
}
运行该代码并检查其输出 −
Incremented value of x: 6
in main - x:5
Similarities Between Static and Global Variables
静态变量与 global variable 有一些相似之处。如果两者均未显式初始化,则两者都初始化为“0”(对于数字类型)或“空指针”(对于 pointers )。
静态变量的范围局限于在其中声明的函数或块中。这不同于全局变量,全局变量可在整个程序中访问。此外,还可以使用 extern 关键字在另一个代码文件中导入静态变量。
Example
您也可以将全局变量声明为静态。请查看以下示例 −
#include <stdio.h>
int myfunction();
static int x = 5;
int main(){
myfunction(x);
printf("Inside the main function, x: %d\n", x);
return 0;
}
int myfunction(){
x++;
printf("Incremented value of x: %d\n", x);
}
当你运行这段代码时,它将产生以下输出:
Incremented value of x: 6
Inside the main function, x: 6
最好使用静态变量仅在文件中访问。另一方面,使用全局(使用 extern )变量从程序中的任何位置进行访问(如果在其他文件中声明 extern )。