我是一個noob,所以我會做這個簡短。以下是合法的(C99)?我不想一次存儲超過一個數組。我可以創建一個最大需要長度的數組,並且只使用它的一部分,但我寧願這樣做。聲明數組兩次(C99)
int main(){
double drm[15000];
//do some stuff
double drm[14000];
//do some other stuff
}
我是一個noob,所以我會做這個簡短。以下是合法的(C99)?我不想一次存儲超過一個數組。我可以創建一個最大需要長度的數組,並且只使用它的一部分,但我寧願這樣做。聲明數組兩次(C99)
int main(){
double drm[15000];
//do some stuff
double drm[14000];
//do some other stuff
}
不,你不能那樣做。他們需要在不同的區塊。你可以這樣做:
int main(void)
{
{
double drm[15000];
// do some stuff
}
{
double drm[14000];
// do some other stuff
}
}
但是,爲什麼不只是調用一個函數呢?即使你把它們放在不同的塊中,你實際上也不能確定編譯器在存儲方面做什麼。
由於數組與C中的指針強相關,因此您也可以使用動態數組。首先,分配一個新的具有15000個元素的雙數組。當你不再需要它時,刪除它。然後創建一個包含14 000個元素的新數組。
不要忘記在使用陣列後釋放你的堆。人們往往會忘記這一點。此外,你應該檢查分配是否成功。
int main(void)
{
double *drm = 0;
drm = (double*)malloc(15000 * sizeof(double));
// do something
free(drm);
drm = (double*)malloc(14000 * sizeof(double));
// do some other stuff
free(drm); // don't forget me
}
但是,我會同意卡爾諾魯姆:使用函數來代替。
文章被標記爲「C99」,而不是「C++」。請更新您的示例以使用'malloc()'和'free()'。 – tomlogic 2012-04-04 18:28:39
何時將'new'添加到C99? – KevinDTimm 2012-04-04 18:29:07
哦,對不起,我可能混合了這兩種語言。我稍後會解決這個問題。 – 2012-04-04 18:30:43
你可以使用malloc
和free
(或realloc
如果你不介意保持數據):
#include <stdlib.h>
int main(void)
{
double *drm = (double *)malloc(sizeof(double)*15000);
//do stuff
free(drm);
drm = (double *)malloc(sizeof(double)*14000);
//do other stuff
free(drm);
}
不要施放malloc()的結果 – KevinDTimm 2012-04-04 18:53:36
@KevinDTimm爲什麼不呢?它沒有什麼問題。 – 2012-04-04 18:56:14
@JacobAbrahams:沒有什麼正確的。類型'void *'的表達式可以隱式轉換爲任何指針類型(除了指向函數的類型)。演員陣容很混亂,根據具體情況可以掩蓋錯誤。例如,在C90中,如果您忘記'#include
謝謝!我沒有把它放在我最小的例子中,但它實際上在for(blah = 0; blah
user1313527
2012-04-04 19:26:00
是的 - 一個新的塊在任何有'{'的地方開始,並在匹配的'}出現的地方結束。 – 2012-04-04 20:43:44