⑴ 關於c語言的數組
你提這個問題涉及幾個方面
1.靜態存儲區
2.靜態數組(static數組),全局數組,動態數組,局部數組
3.給數組賦初值
下面分別解答
1.靜態存儲區/BSS段/棧
一個程序一般分為3段:text段,data段,bss段
text段:就是放程序代碼的,編譯時確定,只讀,
data段:存放在編譯階段(而非運行時)就能確定的數據,可讀可寫
就是通常所說的靜態存儲區,賦了初值的全局變數和靜態變數存放在這個區域,常量也存放在這個區域
bss段:定義而沒有賦初值的全局變數和靜態變數,放在這個區域
2.數組定義
函數外不加static定義的數組為全局數組
用static定義靜態數組(函數內或函數外)
用malloc定義動態數組
函數內不加static關鍵字的數組,為局部數組
3.數組賦初值
對全局數組,定義並賦初值,則在data段,定義未賦初值,在bss段
靜態數組也一樣,無論靜態數組是在函數內還是函數外,定義並賦初值,則在data段,定義未賦初值,在bss段
動態數組,全是從堆上分配的
局部數組,從函數的棧上分配的,顯然存儲在棧上,函數結束就釋放
重點區分最具有迷惑性的以下兩種定義
int func1()
{
char s[200]="hello world!";
}
int func2()
{
static char s[200]="hello world!";
}
func1中,"hello world!"為常量數組,存放在data段
數組s從func1的棧上分配,然後常量數組的值復制到數組s中
func2中,"hello world!"為初值,數組s編譯時就確定在data段,
初值為"hello world!"
⑵ C語言數組程序
這個程序,是要先輸入一個<10的正整數n,然後再輸入n*n個整數到一個二維數組中。
最後,計算並輸出二維矩陣的主對角線及其右上方所有元素的累乘積(很容易「溢出」的哦!)。