gpt4 book ai didi

c - 为什么静态和动态变量在 c 初始化期间不能分配

转载 作者:太空宇宙 更新时间:2023-11-04 08:21:34 26 4
gpt4 key购买 nike

1)无效场景

int *p = (int*)malloc(sizeof(p));

int main(void)
{

*p = 10;
printf("%d", *p);
}

2)无效场景

int main(void){

static int *p = (int*)malloc(sizeof(p));

}

3)//有效场景

int main(void){

static int *p;
p = (int*)malloc(sizeof(p));

}

4) 有效场景

int *p;

int main(void)
{

p = (int*)malloc(sizeof(p));
*p = 10;
printf("%d", *p);
}

为什么方案一和方案二无效而方案三和方案四有效?

最佳答案

从根本上说,唯一真正的答案归结为简单的“这些是规则”。 C 本可以以不同方式指定,以便您询问的用法都是有效的,但事实并非如此。

也许您是在询问基本原理。当然,C 选择的方法更简单,因为它允许所有静态对象(包括所有全局对象和 static 本地对象)从存储在程序镜像中的数据进行初始化。允许不是编译时常量的初始值设定项将要求程序执行在调用 main() 之前从初始值设定项开始。这将更加复杂和困惑。

关于c - 为什么静态和动态变量在 c 初始化期间不能分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33179894/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com