有人可以向我解释为什么我不能做这样的事情吗?
int* arr1 = malloc(sizeof(int));
static int* arr2 = malloc(sizeof(int));
int main() {
return 0;
}
在这种情况下我得到编译错误的原因是什么?
初始化器元素不是常量
答案 0 :(得分:8)
因为malloc是一个函数(返回指向已分配区域的指针),并且在C中仅允许您在“运行序列”中运行代码(调用函数,进行计算等),所以C是一个过程语言。
这与为变量设置静态初始值不同,后者将由c运行时init在调用main()之前初始化
答案 1 :(得分:1)
在文件范围内定义的对象具有静态存储期限。
来自C标准#6.7.9p4 [初始化]
对于具有静态或线程存储持续时间的对象,初始化器中的所有表达式均应为常量表达式或字符串文字。 [强调我的]