相关疑难解决方法(0)

编译器如何在不知道编译时的大小的情况下分配内存?

我写了一个C程序,它接受来自用户的整数输入,用作整数数组的大小,并使用该值声明给定大小的数组,我通过检查数组的大小来确认它.

码:

#include <stdio.h>
int main(int argc, char const *argv[])
{
    int n;
    scanf("%d",&n);
    int k[n];
    printf("%ld",sizeof(k));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

而且令人惊讶的是它是正确的!该程序能够创建所需大小的数组.
但是所有静态内存分配都是在编译时完成的,并且在编译期间,其值n是未知的,那么为什么编译器能够分配所需大小的内存呢?

如果我们能够分配所需的内存就是这样,然后有什么用使用动态分配的malloc()calloc()

c memory arrays c99 variable-length-array

66
推荐指数
3
解决办法
4308
查看次数

禁用gcc中的可变长度自动数组

即使使用-std=c89flag 也无法禁用它.我该如何禁用它?

linux gcc

9
推荐指数
1
解决办法
1308
查看次数

标签 统计

arrays ×1

c ×1

c99 ×1

gcc ×1

linux ×1

memory ×1

variable-length-array ×1