0
我正在學習內存在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
也被視爲靜態?
可能的重複[什麼是「靜態」在C程序中的意思?](http://stackoverflow.com/questions/572547/what-does-static-mean-in-ac-program) – 2015-02-24 02:56:22
是的,它是。全局變量和靜態局部變量之間的唯一區別就是範圍。 – Mints97 2015-02-24 02:57:12
那麼爲什麼有人仍然在主函數之外寫入'static int x = 5'?如果它已經是靜態的,它不會是多餘的嗎?我相信我看到過類似的東西。 – 2015-02-24 03:00:24