據我所知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]));
`
據我所知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]));
`
struct task_info tasks[TASK_NO];
不是動態數組。它是一個可變長度的數組,其長度將在運行時決定。
動態數組可以是其大小可以根據需要更改的數組。考慮一個你初始化爲包含10
元素的數組,然後想要將其更改爲包含20
元素。這不存在於C
。
但是,您可以使用指針,動態內存分配和realloc()
自己實現動態數組。但這不會是該語言提供的功能。
好吧,如果你自己使用動態內存分配來實現它。 – szczurcio
是的,可以在C中完成,但不能作爲語法特徵。它可以通過聲明一個指針,爲該指針分配空間並將該指針視爲一個數組來完成。你可以用'realloc'來改變數組的大小。 –
@szczurcio真。我認爲Stroustrup在1979年左右就開始了,但它有點失控。 –
這被稱爲VLA(可變長度數組),並且自C99以來受到支持(儘管C11中不需要) – szczurcio
sizeof()關鍵字在編譯時計算,而不是運行時計算,所以不會給出正確的數字對於'total' – user3629249
反對票的原因是什麼?問題質量如此之差或答案如此衆所周知? –