C(动态)数组(固定大小)

标签 c arrays dynamic stack push

您好,我想知道为什么这在教程中有效,因此它总是列出数组必须具有固定大小,除非使用 malloc 动态创建数组。

#include <stdlib.h>
#include <stdio.h>

int main(int argc, char **argv) {
        if(argc < 2)
        return 0;

        int tmp[ atoi(argv[1])  ];


        printf("sizeof tmp equals to %d\n", sizeof tmp);
        return 0;
}

执行此操作时,ASM 级别的后台会发生什么?它是如何运作的? 它是否在堆栈上分配启动程序时给定的大小以及堆栈的最大值是多少?

这是否比使用 malloc 更昂贵?

提前致谢。

最佳答案

C99介绍variable length array其长度不是常量表达式。声明

int tmp[ atoi(argv[1]) ];  

声明tmp为VLA。

关于C(动态)数组(固定大小),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25950909/

相关文章:

c++ - 编译器如何存储自动变量

在 sizeof double == sizeof float == 4 的系统上将 32 位 float 转换为 64 位 double

以字符串为索引的 PHP 数组数组

javascript - 在 Jquery Mobile 中动态创建和添加页面

c - 动态访问 C 结构

c - 为什么这个 isNumeric 函数不能与 fgets 一起使用?

c - 如何初始化静态 C 数组?

arrays - 如何将向量的元素设置为指向数组数组中的第一个元素?

javascript - 根据lastChangedDate构造新数组

c++ - 如何在 Mac OS X 上构建和使用动态库?