2015-11-18 100 views
-1

據我所知C不支持動態數組。在這裏我實現了一個動態數組任務與可變長度TASK_NO,我通過scanf獲取。代碼編譯時沒有錯誤,並且運行正常。可能是什麼原因?請澄清。C支持動態數組

scanf("%d" , &TASK_NO); 
int counter=TASK_NO; 
struct task_info tasks[TASK_NO]; 
printf("total: %d\n", sizeof(tasks)/sizeof(tasks[0])); 

`

+1

這被稱爲VLA(可變長度數組),並且自C99以來受到支持(儘管C11中不需要) – szczurcio

+0

sizeof()關鍵字在編譯時計算,而不是運行時計算,所以不會給出正確的數字對於'total' – user3629249

+0

反對票的原因是什麼?問題質量如此之差或答案如此衆所周知? –

回答

4

struct task_info tasks[TASK_NO];不是動態數組。它是一個可變長度的數組,其長度將在運行時決定。


動態數組可以是其大小可以根據需要更改的數組。考慮一個你初始化爲包含10元素的數組,然後想要將其更改爲包含20元素。這不存在於C


但是,您可以使用指針,動態內存分配和realloc()自己實現動態數組。但這不會是該語言提供的功能。

+0

好吧,如果你自己使用動態內存分配來實現它。 – szczurcio

+0

是的,可以在C中完成,但不能作爲語法特徵。它可以通過聲明一個指針,爲該指針分配空間並將該指針視爲一個數組來完成。你可以用'realloc'來改變數組的大小。 –

+2

@szczurcio真。我認爲Stroustrup在1979年左右就開始了,但它有點失控。 –