c語言靜態儲存陣列的賦值問題。

2025-03-31 02:05:20 字數 1473 閱讀 7864

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樓:扈鋒戲凡波

chars[5]=

相當於對陣列初始化,這樣的話,陣列強兩個字元是'1'

清搏2',其他字元臘正鏈初始化為輪孫'\0',這其實是有對s[2]進行賦值的。

而a陣列是沒有初始化,自然就沒對a[1]賦值。

兩個題目結果自然就不同了。

c語言陣列儲存問題

3樓:公良訪風區凝

c[3]是可以儲存3個字元的,c[n]就明肆是儲存n個字元,n是int

整形常量。對於,以上你提出的問題,定義乙個字元陣列。

c[3],的確,他只可以儲存三個字元,分別儲存在c[0],c[1],c[2],但是,在c/c++中並沒有檢查陣列是否越界或者是超界的功能,所以,在scanf(),語句中,我們輸入的字元,c/c++是沒有檢查,所以,理論上我們只能輸入兩個字元,最後乙個留給系統自動新增的\0,但是,實際上,我們輸入的字元。qwe是可以正確執行的,最後,系統也會自動新增\0,但是,新增的\0,就可能在陣列定義之外了,可能就是系統在定義陣列的之後,對於我們輸入的其他字元也相應在陣列定義之後的一連串空間中繼續新增,所以,可散悔以輸入大於3的字元都可以正常輸出,但是衝槐正,會報錯!錯誤是陣列的訪問越界了吧!

4樓:章永新鹿涵

因為c語言的陣列會有溢位,你定義陣列是應該使其足夠大,否則可能會報錯。

5樓:田和藹向熙

c的資料的邊界是由程式設計師自己管理的,最好不要這樣做,輕則把堆或是棧破壞了,程式唯告會崩潰,重則有緩衝區溢簡如出指咐明漏洞,給黑客可趁之機。

C語言陣列問題,c語言陣列宣告問題

for i 1 i 10 i break 要求按已排好的順序規律將它插入到陣列中.這段改為 for i 1 i 10 i a i 1 m break 你確定是從大到小排列嗎?我怎麼感覺你的程式是從小到大排列的啊。include void main 從鍵盤接收10個數。for j 1 j 10 j f...

C語言靜態變數問題?c語言中靜態變數是怎麼用的

static變數static宣告的變數為 靜態區域性變數 變數內容具有永續性。該區域性變數的值在函式呼叫結束之後不會消失,而仍然保留其原值。即它所佔用的儲存單元不釋放,在下一次呼叫該函式時,其區域性變數的值仍然存在,也就是上一次函式呼叫結束時的值。return m 前置 是用之前就加,用的人拿到的一定是新...

C語言的問題,指標陣列,c語言指標陣列

改變不了,字串常量是改不了的,你可以試試char p aaaaa p 1 b 這樣是改不了的 只能定義二維陣列才可以改 char p 3 100 這樣才可以改,不要問為什麼,字串常量就是不能改 直接讓指標指向另一個字串即可 p 0 aaaa 這樣定義指標指向的字串是無法修改的。c語言指標陣列 p是i...