gpt4 book ai didi

c - 这两个变量在内存中的处理方式有何不同

转载 作者:太空宇宙 更新时间:2023-11-04 07:10:40 25 4
gpt4 key购买 nike

我正在学习用 C 语言建模内存的方式。我知道基本上有四个不同的部分。静态内存、栈、堆和程序内存。我知道当某些东西被声明为静态时,它的生命周期(不一定是它的可见性)就是整个程序。所以假设我写了这样的东西:

#include <stdio.h>
void add();

main(){
int i;
for (i=0; i<6;++i){
add();
}
return 0;
}

void add(){
static int x=5;
x++;
printf("The value of x is %d\n", x);
}

程序一直跟踪x 的值直到最后一次执行。如果我这样写程序,我会得到几乎相同的结果:

#include <stdio.h>

int x=5;

add(int *num){
(*num)++;
printf("The value of x is %d\n", *num);
}

main(){
int i;
for (i=0; i<6;++i){
add(&x);
}
return 0;
}

我没有使用 static 关键字,但由于它的作用,程序会在 add() 函数的连续执行中跟踪它的值。我想知道在这两种情况下,x 在内存中的处理方式是否相同。第二个 x 是否也被视为静态?

最佳答案

Is the second x also treated as static?

No Second x 不被视为Static。您仍然可以将第二个变量设置为静态,这会导致不同的结果。如果第二个 x 声明为 static“范围将限于文件”,但在您的情况下它限于文件。

是的,在这两种情况下,x 都存在于程序的生命周期中,但请注意限制范围的大括号的使用,

在第二种情况下,x 仅限于函数 add() 的范围

void add(){  // <= From here

static int x=5;
x++;
printf("The value of x is %d\n", x);

} // <= to here

对于第二种情况,x 是全局的,也可以从其他文件访问。

关于c - 这两个变量在内存中的处理方式有何不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28687394/

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