gpt4 book ai didi

c - 声明一个全局变量和一个静态变量

转载 作者:行者123 更新时间:2023-12-02 06:02:17 24 4
gpt4 key购买 nike

我正在研究静态变量,我在 wikipedia 上遇到了这段代码。静态 int x 在整个程序中存储它的值。即使我们全局声明它,它也会存储以前的值。这是否意味着静态变量和全局变量被视为相同。如果不是,两者如何工作?

#include <stdio.h>

void func() {
static int x=0;
// x is initialized only once across three calls of func()
printf("%d\n", x); // outputs the value of x
x = x + 1;
}

int main(int argc, char *argv[]) {
func(); // prints 0
func(); // prints 1
func(); // prints 2
return 0;
}

最佳答案

说明符 static根据您使用它的位置,其含义略有不同。您有 3 种选择来声明要在程序的整个生命周期中保留其值的变量:

1) 将变量声明为 static 时在函数内(即局部变量)意味着它的值将在程序的整个生命周期中的函数调用之间保留。如果将变量初始化为一个值,则这是该变量在第一次函数调用时的起始值;所有后续函数调用都将保留变量的值,而不是重新初始化。

2) 当声明一个全局变量时(没有 static 说明符),它的值在程序的整个生命周期中都被保留,就好像它是一个局部静态变量,但不同的是全局变量是可见的(被读取和写入)由程序的任何文件的任何函数。

3) 声明全局时 static变量,它的值在程序的整个生命周期中再次保留,但与普通的全局变量相比,它只能由同一文件中的其他函数访问。

总之,所有这三种类型的变量都保留了它们的值;区别在于它们的作用域,这意味着哪些函数可以访问这个变量。

以下代码的所有 3 个变量在程序的整个生命周期中都保持它们的值。

int x = 100;         // visible to any function within any .c file of this program
static int y = 5000; // visible from any function within this .c
int func (int i)
{
static int z = 0; // invisible to all other functions
x += i;
y += i;
z += i;
return z;
}

完整的解释可以在 here 中找到.

关于c - 声明一个全局变量和一个静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18841414/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com