3 回答

TA貢獻1906條經驗 獲得超3個贊
這里有兩個問題,生存期和范圍。
變量的范圍是可以看到變量名稱的位置。在此,x僅在函數foo()中可見。
變量的生存期是變量存在的時間。如果x是在沒有關鍵字static的情況下定義的,則生存期將是從foo()的條目到foo()的返回;因此每次調用都會將其重新初始化為5。
關鍵字static的作用是將變量的生存期延長到程序的生存期;例如,初始化僅發(fā)生一次,然后該變量將在以后對foo()的所有調用中保留其值-無論它變?yōu)楹畏N值。

TA貢獻1772條經驗 獲得超6個贊
輸出:6 7
原因:靜態(tài)變量僅初始化一次(不同于自動變量),并且在運行時將忽略靜態(tài)變量的進一步定義。并且,如果未手動初始化,則會自動通過值0進行初始化。所以,
void foo() {
static int x = 5; // assigns value of 5 only once
x++;
printf("%d", x);
}
int main() {
foo(); // x = 6
foo(); // x = 7
return 0;
}

TA貢獻1812條經驗 獲得超5個贊
與具有以下程序相同:
static int x = 5;
void foo()
{
x++;
printf("%d", x);
}
int main()
{
foo();
foo();
return 0;
}
static關鍵字在該程序中所做的全部工作是(實際上)告訴編譯器“嘿,我在這里有一個變量,我不希望其他人訪問,也不告訴其他人它存在”。
在方法內部,static關鍵字告訴編譯器與上面相同,但是,“不要告訴任何人此函數存在于此函數之外,只能在此函數內部訪問”。
我希望這有幫助
- 3 回答
- 0 關注
- 512 瀏覽
添加回答
舉報