func(int len, ......)
{
int array[len] = {0};
}
是因為入參和array本身都是保存在堆疊上,所以再分配陣列長度時候已經確定入參len,所以不會有問題,是吧
如果函式內需要記憶體推薦上面這么寫,還是下面這么寫
func(int len, ......)
{
int *array = (int*)malloc(sizeof(int)*len);
}
uj5u.com熱心網友回復:
陣列長度必須是編譯期能夠確定。除非是支持變長的陣列的編譯器。
uj5u.com熱心網友回復:
第一個是有問題的,因為len不確定長度,因此編譯器不知道要給它申請多長的陣列。第二個是沒問題的,因為是動態申請的,是在呼叫函式時才會去呼叫malloc申請空間。
uj5u.com熱心網友回復:
第一個有問題。語法錯誤要不
array[len]=10;
要不就是
int array[100]={10};
int array[len]={10}沒有這么寫的
uj5u.com熱心網友回復:
C99有一個vla特性支持你用變數作為陣列大小uj5u.com熱心網友回復:
但是 VLA是不能初始化的所以你的第一段代碼應該還是錯的
uj5u.com熱心網友回復:
這個到不是保存在堆疊上的問題。從C99開始引入VLA,所以int array[len] 合法,但是不能用{ }初始化。第一段代碼能編譯通過,說明編譯器用的是c++哈,而且不是上古時期的那種~~~
uj5u.com熱心網友回復:
第1段代碼沒有問題,我編譯和運行和第二種結果完全一樣
uj5u.com熱心網友回復:
第1段代碼沒有問題,我編譯和運行和第二種結果完全一樣uj5u.com熱心網友回復:
編譯和運行正確,我試驗過,但是確實不能={}初始化,為啥不能初始化uj5u.com熱心網友回復:
你的編譯器不符合標準
uj5u.com熱心網友回復:
第1段代碼沒有問題,我編譯和運行和第二種結果完全一樣
第一個是有問題的,因為len不確定長度,因此編譯器不知道要給它申請多長的陣列。
第二個是沒問題的,因為是動態申請的,是在呼叫函式時才會去呼叫malloc申請空間。
那如果第一種沒問題,問一下未呼叫之前,len是多少呢?
uj5u.com熱心網友回復:
第一個有問題。語法錯誤
要不
array[len]=10;
要不就是
int array[100]={10};
int array[len]={10}沒有這么寫的
第1段代碼沒有問題,我編譯和運行和第二種結果完全一樣
你的編譯器不符合標準
leetcode上也是正常運行的
uj5u.com熱心網友回復:
要想正確,除非他支持vla轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/98889.html
標籤:C語言
下一篇:多執行緒多任務
