我对静态整数的概念感到困惑.当我在main函数中初始化一个静态整数时
static int i;
Run Code Online (Sandbox Code Playgroud)
现在,静态整数被赋值为0.现在下一步:
i++;
Run Code Online (Sandbox Code Playgroud)
我变成了1.
现在程序终止了.我想知道在下一次运行中会产生什么程序.此外,如果整个程序关闭会发生什么?我明白第一行是静态int i; 因此,下次运行该函数时的下一个值应保留i先前运行时的值.如果是这样,变量静态的优势是什么?变量是否有时间限制,还是可以永久存储?如果我再次运行该功能会有什么价值?
在C中,"static"表示变量在全局存储中具有局部范围.
C中的变量范围是一个块.换句话说,变量可以在声明它们的块内使用.通常他们只是保持他们的价值直到阻止结束,之后就会丢失.例:
{
int a;
// Only a can be used here
{
int b;
// a and b can be used here
{
int c;
// a,b and c can be used here
}
//just a and b can be used here. c is not available anymore
}
// only a can be used here. Neither b nor c are available anymore
}
Run Code Online (Sandbox Code Playgroud)
除了可以在整个程序中使用的全局变量之外,这是正确的.
另一个例外是静态变量.它只能在块内部看到,但在块结束后保持其值.
这意味着如果在函数内部声明一个静态变量,它将在函数调用之间保持其值.
例如,下面的函数有一个局部变量.局部变量具有块的范围(这意味着您只能访问它声明的块{}内的变量'var',在下面的函数内部的情况下):
void countFunction(void)
{
int var = 0;
var = var + 1;
printf("Value is %d\n", var);
}
Run Code Online (Sandbox Code Playgroud)
一旦变量不是静态的,每次调用函数时它都会打印"Value is 1",因为变量存储在函数调用中分配的堆栈中,并在函数返回后解除分配.
如果将var更改为静态,
void countFunction(void)
{
static int var = 0;
var = var + 1;
printf("Value is %d\n", var);
}
Run Code Online (Sandbox Code Playgroud)
第一次调用函数var时,将初始化为0,函数将显示"Value is 1".然而,在第二次,var将已经分配到全球区域.它不会再次初始化,函数将显示"Value is 2".
这在程序执行中.
虽然只要程序执行就会分配静态变量,但是在程序完成后它不会保留其值(程序将释放所有内存).为下次运行保留任何值的唯一方法是将其存储在非易失性介质(如磁盘)中.
希望能帮助到你.
归档时间: |
|
查看次数: |
1307 次 |
最近记录: |