代码1:
int size;
struct demo
{
int a;
};
int main()
{
scanf("%d",&size);
struct demo d[size];
return 0;
}
字符串
这段代码运行良好。
代码2:
int size;
struct demo
{
int a;
};
int main()
{
scanf("%d",&size);
return 0;
}
struct demo d[size];
型
此代码显示错误:
error : variably modified 'd' at file scope
型
为什么这样的错误出现在 Code 2 中,而 Code 1 运行正常?
3条答案
按热度按时间kt06eoxx1#
在代码2中,结构体数组驻留在数据段中
数据段是程序的虚拟地址空间的一部分,其中包含由程序员初始化的全局变量和静态变量。此段的大小由程序员在编译或汇编程序之前放置的值确定,并且在运行时不会更改。
hujrc8aj2#
在函数内部声明的变量是堆栈变量,在调用函数时分配。另一方面,全局变量是在任何函数执行之前分配的堆变量。这就是为什么在第二段代码中,不可能为数组d分配内存。
8cdiaqws3#
因为第二个例子中的
d
数组是全局的;它不能是可变长度数组。它们直到运行时才得到它们的实际大小,这对于全局变量是不可能的。编译器必须能够在可执行文件中为全局数据分配空间,如果大小未知,这就变得不可能。