關鍵字:static extern auto
區域性變數的作用域,起始於定義處,直到所在的大括號處結束。
全域性變數的作用域,起始與定義處,知道本檔案結束。參考
先看幾段**,理解了他們就理解了作用域的概念:
//===**1*****
#includeint main()
printf("a = %d\n",a);//a = 10
return 0;
}/*整個程式的執行結果是:
a = 1
a = 10
說明括號內的變數作用不了括號外的變數*/
再看下面一段**,與第一段**的區別是第乙個區域性變數a沒有給初始值:
//===**2*****
#includeint main()
printf("a = %d\n",a);//a = ?
return 0;
}/*整個程式的執行結果是:
a = 1
a = 不可** ,我的電腦跑出來a = 2686756
*/
原因是,a 是區域性變數,區域性變數在計算機中儲存在棧中,棧的值是之前儲存在裡面的值,所以是隨機的。
再看第三段**,假如第乙個a是全域性變數,也就是宣告定義在main函式以外:
//===**3*****
#includeint a = 10;
int main()
printf("a = %d\n",a);//a = 100
return 0;
}/*整個程式的執行結果是:
a = 1
a = 100
*/
值得注意的是,如果a是全域性變數,預設初值為0,看第四段**:
//===**4*****
#includeint a;
int main()
printf("a = %d\n",a);//a = 0
return 0;
}/*整個程式的執行結果是:
a = 1
a = 0
*/
Java中變數的作用域和生存週期
看看下面的 輸出啥呢 package cn.lifx.test public class test2 public void aa public static void bb public void cc 編譯就出錯了,為啥呢?唉,挺基礎的東西,要我做還真做不對,基礎不紮實啊!因為 區域性變數不能被...
靜態變數的生存週期和作用域
首先要理解生存週期與作用域的區別 生存週期 變數從定義到銷毀的時間範圍。存放在全域性資料區的變數的生存週期存在於整個程式執行期間,而存放在棧中的資料則隨著函式等的作用域結束導致出棧而銷毀,除了靜態變數之外的區域性變數都存放於棧中。作用域 變數的可見 域 塊作用域,函式作用域,類作用域,程式全域性作用...
區域性變數的作用域和生存週期
1 在函式開頭定義 2 在函式的內部定義 3 在復合語句塊內部定義 定義在函式內部的變數只能在函式內部引用,同樣定義在復合語句塊中的變數只是在復合語句塊內有效。將這種變數稱為 區域性變數 顧名思義,這些變數的作用域僅僅是在函式內部或復合語句塊內。復合語句塊的區域性變數舉例 include int m...