我正在学习用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
是否也被视为静态?
答案 0 :(得分:3)
第二个x是否也被视为静态?
没有第二个x
不被视为Static
。您仍然可以创建第二个变量Static,这会导致不同的结果。如果第二个x
被声明为static
,则“范围将仅限于文件”,但在您的情况下, NOT 仅限于文件。
是的,在这两种情况下x
都存在于程序的生命周期中,但请注意使用限制范围的大括号,
在第二种情况下,x
仅限于函数add()
void add(){ // <= From here
static int x=5;
x++;
printf("The value of x is %d\n", x);
} // <= to here
对于第二种情况,x
是全局的,也可以从其他文件访问。