回覆列表
  • 1 # ikiek3712

    ANSI/ISO C之前,對陣列的一次性初始化必須要求陣列被宣告為靜態的,樓上說static和extern與變數的使用範圍有關,沒錯,但不是這裡要使用的含義,這裡靜態(全域性變數預設為靜態的)指的是該變數只初始化一次。全域性變數肯定是隻初始化一次的,所以這主要是針對函式塊裡面宣告的變數來說的,就是說在函式塊裡面宣告的靜態區域性變數,只在第一次進入這個函式塊的時候才進行初始化。ANSI/ISO C允許對宣告的非靜態陣列也進行一次性初始化。所以在支援ANSI/ISO C標準的編譯環境下,函式塊內寫static int a[3] = { 2, 4, 5 };和int a[3] = { 2, 4, 5 };都對。函式塊外面寫static時才是樓上所說的變數的適用範圍,不加static宣告出來的變數的範圍可以在檔案之間,加了static宣告的變數則只在該檔案內。但此時,你加不加static都不會影響你寫int a[3] = { 2, 4, 5 };因為這個時候a是全域性變數,預設的是靜態的,這樣的初始化當然沒有問題的。另外,這種一次性初始化必須在定義一個變數的時候才是允許的。這一點,樓主要謹記,不管是ANSI/ISO C還是C99都是不允許出現int a[3];a[3] = { 2, 4 , 5 }的,不管有沒有static修飾。如果你不想在定義的時候初始化,那就只有等到你需要的時候透過賦值操作來進行,陣列當然得透過迴圈。

  • 中秋節和大豐收的關聯?
  • 阿里健康上線“疫苗查詢”功能,你怎麼看?