据我所知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
反对票的原因是什么?问题质量如此之差或答案如此众所周知? –