c語言初始化陣列時一定要使用靜態儲存嗎

時間 2021-09-02 02:41:48

1樓:匿名使用者

ansi/iso c之前,對陣列的一次性初始化必須要求陣列被宣告為靜態的,樓上說static和extern與變數的使用範圍有關,沒錯,但不是這裡要使用的含義,這裡靜態(全域性變數預設為靜態的)指的是該變數只初始化一次。全域性變數肯定是只初始化一次的,所以這主要是針對函式塊裡面宣告的變數來說的,就是說在函式塊裡面宣告的靜態區域性變數,只在第一次進入這個函式塊的時候才進行初始化。ansi/iso c允許對宣告的非靜態陣列也進行一次性初始化。

所以在支援ansi/iso c標準的編譯環境下,函式塊內寫

static int a[3] = ;

和int a[3] = ;

都對。函式塊外面寫static時才是樓上所說的變數的適用範圍,不加static宣告出來的變數的範圍可以在檔案之間,加了static宣告的變數則只在該檔案內。但此時,你加不加static都不會影響你寫int a[3] = ;因為這個時候a是全域性變數,預設的是靜態的,這樣的初始化當然沒有問題的。

另外,這種一次性初始化必須在定義乙個變數的時候才是允許的。這一點,樓主要謹記,不管是ansi/iso c還是c99都是不允許出現

int a[3];

a[3] =

的,不管有沒有static修飾。如果你不想在定義的時候初始化,那就只有等到你需要的時候通過賦值操作來進行,陣列當然得通過迴圈。

2樓:投機士

陣列在定義時並沒有強制要求要初始化,可以需要時再賦值

綜上,c語言中陣列可以不初始化

其次,在c語言中,陣列歸於布局資料型別。乙個陣列能夠分化為多個陣列元素,這些陣列元素能夠是根本資料型別或是布局型別。因而按陣列元素的型別不一樣,陣列又可分為數值陣列、字元陣列、指標陣列、布局陣列等各種種類。

3樓:匿名使用者

定義時初始化應該寫成

int a=

或者用new運算子來實現.

c++裡是這樣的,至於c我就不清楚了.

當然不行,a[3]=是什麼句子啊!!!a又不是二維陣列.

4樓:

無論是靜態,區域性還是全域性陣列只有在定義時才能初始話,否則必須通過其它方法,如迴圈操作實現。

如:int a = ;

static int b[3] = ;

上面是在陣列定義時初始化,因而正確

任何int a[3];

static int b[3];

a[3] = ;

b[3] = ;

沒有在定義時初始化都是錯誤的!

5樓:匿名使用者

不管是什麼變數都應該先定義後賦值

而且賦值要符合變數定義

6樓:匿名使用者

static和extern和定義資料無關,只和變數的使用範圍有關,static靜態全域性變數的使用範圍是當前檔案,extern是檔案間的訪問。

static int a = ;

int b = ;

void main()

建議不要看譚浩強的書,這裡有本書,bjarne stroustrup - the c++ programming language

看就看大師寫的。

c語言中定義陣列時,前面的static、auto、extern三種儲存類別有什麼作用?

7樓:神經丿末梢

c語言中提供了儲存說明符auto,register,extern,static說明的四種儲存類別。四種儲存類別說明符有兩種儲存期:自動儲存期和靜態儲存期。

其中auto和register對應自動儲存期。具有自動儲存期的變數在進入宣告該變數的程式塊是被建立,它在該程式塊活動時存在,退出該程式塊時撤銷。

在函式內部定義的變數成為區域性變數。在某些c語言教材中,區域性變數稱為自動變數,這就與使用可選關鍵字a u t o定義區域性變數這一作法保持一致。區域性變數僅由其被定義的模組內部的語句所訪問。

換言之,區域性變數在自己的**模組之外是不可知的。切記:模組以左花

括號開始,以右花括號結束。

對於區域性變數,要了解的最重要的東西是:它們僅存在於被定義的當前執行**塊中,即區域性變數在進入模組時生成,在退出模組時消亡。

定義區域性變數的最常見的**塊是函式。

整數變數x被定義了兩次,一次在func1()中,一次在func2()中。func1()和func2()中的x互不相關。其原因是每個x作為區域性變數僅在被定義的塊內可知。

語言中包括了關鍵字auto,它可用於定義區域性變數。但自從所有的非全域性變數的預設值假定為auto以來,auto就幾乎很少使用了,

8樓:匿名使用者

static 有好幾種用法,比如說遮蔽函式宣告,避免汙染全域性變數表。。。在函式內部則是讓區域性變數放在靜態儲存區。。。

物件陣列初始化,物件陣列初始化(C )

95郭逗比 一 一維 int numbers new int 不定長 int numbers new int 3 定長 二 多維 int numbers new int 不定長 int numbers new int 2,2 定長 三 例子 a int mf1 new int 6 注意初始化陣列的範...

c語言為什麼要初始化,c語言為什麼要初始化

c的區域性變數一般是在棧上進行分配的。棧使用的是ram,掉電內容丟失,上電內容隨機。這裡的隨機,一般指其不能確定其內容一定是什麼,而不是說其內容完全沒有規律,與數學上的隨機數沒有什麼關係。舉個例子,乙個位元組的ram,8位有256種可能。數學上講隨機數,那麼這個位元組上電後應該是256種可能性中某乙...

c語言中初始化賦值和用define命令對字元賦值有什麼異同

回憶在上輩子 一個是賦值一個是巨集替換 int r這個r是個變數,其值可變 而 define r這個r是個巨集,在函式中有用到時會用後面的數值進行替換,不能夠改變其值 前者存在變數r,後者不是變數,編譯前就被替換成數12了 前者是變數賦值,變數r佔記憶體,後者是巨集定義,r不佔記憶體,是預編譯的,只...