2015-11-18 66 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年左右就开始了,但它有点失控。 –