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



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

int* arr1 = malloc(sizeof(int));
static int* arr2 = malloc(sizeof(int));
int main() {
return 0;
}

在这种情况下,我出现编译错误的原因是什么?

初始值设定项元素不是常量

因为malloc是一个函数(它返回一个指向分配区域的指针(,而在C中,你只能在"运行序列"中运行代码(调用函数、进行计算等(,这就是为什么C是一种过程语言。

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

在文件范围内定义的对象具有静态存储持续时间。

来自C标准#6.7.9p4【初始化】

具有静态或线程存储持续时间的对象的初始值设定项中的所有表达式都应为常量表达式或字符串文字[强调矿]

最新更新