每當我需要創建一個數組,其中有許多元素直到執行時間才知道,我這樣做。正在創建具有可變數量元素的數組嗎?
int n, i;
printf("Number of elements: ");
scanf("%d", &n);
int myArray[n];
for(i = 0; i < n; i++)
myArray[i] = 0;
不過我已經告訴3人與計算機科學博士學位不這樣做,因爲「它不能保證在每個編譯工作」,而該元素的數組數必須在編譯時知道。所以他們這樣做。
int myArray[1000];
int n, i;
printf("Number of elements: ");
scanf("%d, &n);
//we must stop at the n element
for(i = 0; i < n; i++)
myArray[i] = 0;
我應該使用哪一個?何時不能保證工作?這只是一種記憶浪費或需要維持遺產嗎?
如果要在C中實現動態數組,請使用動態內存分配。 –
都不是。使用類似'int * myArray = malloc(n * sizeof * myArray);'的方法,並在完成後進行清理。 – WhozCraig
它完全符合C99版本的標準。它被稱爲可變長度數組(VLA)。由於一些不知道的原因,委託人在當前版本(C11)中使VLA成爲可選項 - 不惜一切代價向後兼容。我仍然建議使用它。現代桌面編譯器將支持它(例如gcc和clang)。不要使用過時的編譯器如MSVC。他們在現代C方面也有其他問題。有時候需要剪一個。 WQe不再使用馬車。或莫爾斯電子郵件。您的博士應該繼續 – Olaf