[英]error : variably modified 'd' at file scope
代码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
运行正常?
在代码2中,您的结构数组驻留在数据段中,根据定义
数据段是程序的虚拟地址空间的一部分,其包含由程序员初始化的全局变量和静态变量。 该段的大小由程序员在编译或汇编程序之前放置的值确定,并且在运行时不会更改 。
因为第二个例子中的d
数组是全局的,所以它不能是一个可变长度的数组; 那些直到运行时才得到它们的实际大小,这对于全局来说是不可能的。 编译器必须能够在可执行文件中为全局数据分配空间,如果大小未知,则无法进行。
函数内部声明的变量是堆栈变量,它们在调用函数时分配。 另一方面,全局变量是在任何函数执行之前分配的堆变量。 这就是为什么在第二个代码中,不可能为数组d分配内存。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.