1、static修飾局部變數 在函數體內,只初始化一次,被static聲明過的局部變數在調用過程中值不變。原因:在任意函數內定義局部變數,存儲線上程中的棧區,出函數時自動摧毀,所以在每次調用這個函數時,局部變數的初始值都為定義的值在進行運算。static在修飾局部變數時,存儲在靜態區,函數返回時值保 ...
1、static修飾局部變數
在函數體內,只初始化一次,被static聲明過的局部變數在調用過程中值不變。原因:在任意函數內定義局部變數,存儲線上程中的棧區,出函數時自動摧毀,所以在每次調用這個函數時,局部變數的初始值都為定義的值在進行運算。static在修飾局部變數時,存儲在靜態區,函數返回時值保持不變,出函數不銷毀,下一次進入函數依然存在。
1 void test() 2 { 3 int a = 10; 4 a++; 5 printf("%d ", a); 6 } 7 8 void static_test() 9 { 10 static int a = 10; 11 a++; 12 printf("%d ", a); 13 } 14 int main() 15 { 16 test(); 17 static_test(); 18 test(); 19 static_test(); 20 return 0; 21 }
上述代碼運行結果為11,11,11,12。主要是因為static定義過的局部變數存儲在靜態變數區,在調用過程中值不變。
2、static修飾全局變數
被static聲明過的全局變數無法被其他文件調用,只能被當前文件所調用,其他文件可以定義與其同名的變數,兩者互不影響。未被static聲明過的全局變數加extern關鍵字可以被調用。 在定義不需要與其他文件共用的全局變數時,加上static關鍵字能夠有效地降低程式模塊之間的耦合,避免不同文件同名變數的衝突,且不會誤使用。
3、static修飾函數
和全局變數類似,被static聲明過的函數無法被其他文件調用,只能被當前文件所調用。不同文件可以使用相同名字靜態函數 ,非靜態函數可以在另一個文件直接引用。