为什么我不能在函数外部分配(通过malloc动态分配)变量?

时间:2018-07-13 10:44:29

标签: c

有人可以向我解释为什么我不能做这样的事情吗?

int* arr1 = malloc(sizeof(int));
static int* arr2 = malloc(sizeof(int));

int main() {
    return 0;
}

在这种情况下我得到编译错误的原因是什么?

  

初始化器元素不是常量

2 个答案:

答案 0 :(得分:8)

因为malloc是一个函数(返回指向已分配区域的指针),并且在C中仅允许您在“运行序列”中运行代码(调用函数,进行计算等),所以C是一个过程语言。

这与为变量设置静态初始值不同,后者将由c运行时init在调用main()之前初始化

答案 1 :(得分:1)

在文件范围内定义的对象具有静态存储期限。

来自C标准#6.7.9p4 [初始化]

  

对于具有静态或线程存储持续时间的对象,初始化器中的所有表达式均应为常量表达式或字符串文字 [强调我的]