程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言問答 >> c語言靜態存儲數組的賦值問題。

c語言靜態存儲數組的賦值問題。

編輯:C語言問答

c語言靜態存儲數組的賦值問題。

10 c語言規定,只有靜態存儲數組才能初始化,靜態存儲數組要用static定義,為什麼譚浩強的書在定義字符數組時從來不用static,而是直接賦值?

最佳回答:

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修飾。如果你不想在定義的時候初始化,那就只有等到你需要的時候通過賦值操作來進行,數組當然得通過循環
追問:
高手!
回答:
那對答案滿意否 滿意就采納咯
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved