⑴ C語言裡面的數組都是在編譯的時候就分配好內存的嗎
編譯的時候 只是確定了內存的大小
實際分配還是在運行時分配的
否則 無數的C語言程序 每一個都分配一段內存
卻不運行 電腦受不了的
⑵ C語言:「除了在定義數組時用初值列表對數組整體賦值以外,無法再對數組變數進行整體賦值。」,對嗎
正確的——
這里說的「能」與「不能」是指用C語言的語句操作。C沒有提供對數組整體賦值的語句,所以肯定是不能對數組進行整體賦值的。
嚴格說,「除了在定義數組時……」的說法也欠妥,因為C代碼中的變數定義語句其實也不屬於C,而是C的編譯器語句——就是說那些定義語句並不生成機器代碼,只是在編譯時不一下。
有人認為memcpy之類的函數能整體對數組賦值,那就更不妥了,因為庫函數也不屬於C語言,比如scanf和printf函數能輸入輸出,但人們都認為C語言沒有提供輸入/輸出功能(其實是指沒有提供輸入/輸出語句);況且memcpy之類的函數也是一個元素一個元素地為數組賦值的。
所以,雖然常有人問此類問題,但題目本身覺得還是不嚴謹的,「定義時整體賦值」也只是個寫法而已,編譯器還是一個元素一個元素地賦值的,因此「整體不整體」就是個寫法罷了,實質都不能做到整體。
個人理解,供參考。
⑶ 關於C語言中數組分配內存等問題!額,本人是菜鳥,被一C語言書上的話弄暈了! 如果我的問題有些怪,請見諒
1. 准確地說,局部變數是在該函數被調用的時候才會得到所分配的內存空間。但是該內存空間的分配形式是在編譯的時候就確定了的。
2. char a[10]也會自動被初始化為10個'\0'字元。
3. 一般的數組都是靜態數組。動態數組的申請方式一般為:
int *a=malloc(sizeof(int) * 10); // 這個語句申請了一個能容納10個int的動態數組。
靜態數組的意思是:數組的大小在程序編譯完就確定了。動態數組的意思是:數組的大小要程序運行起來之後才知道。
比如 int a[10];那麼它固定死了,就是10個元素大小。
但動態分配方式就不一定。比如:
int n;
....
int *a= malloc(sizeof(int)*n); //分配了一個動態數組。數組大小由n決定。
⑷ c語言結構體數組賦值
(1)用字元常量逐個初始化數組。例如:
char a[8]={'i','l','o','v','e','y','o','u'};
把8個字元依次分別賦給c[0]~c[7]這8個元素。
如果在定義字元數組時不進行初始化,則數組中各元素的值是不可預料的。如果花括弧中提供的初值個數(即字元個數)大於數組長度,則出現語法錯誤。
如果初值個數小於數組長度,則只將這些字元賦給數組中前面那些元素,其餘的元素自動定為空字元(即'