C 变量/数组的行为
我有两个项目:C 变量/数组的行为,c,arrays,storage,C,Arrays,Storage,我有两个项目: program 1: ---------- #include<stdio.h> int main() { int a[10]; return 0; } program 2: ---------- #include<stdio.h> int a[10]; int main() { return 0; } 程序1: ---------- #包括 int main() { INTA[10]; 返回0; } 方案2: -----
program 1:
----------
#include<stdio.h>
int main()
{
int a[10];
return 0;
}
program 2:
----------
#include<stdio.h>
int a[10];
int main()
{
return 0;
}
程序1:
----------
#包括
int main()
{
INTA[10];
返回0;
}
方案2:
----------
#包括
INTA[10];
int main()
{
返回0;
}
1) 两个程序能否为数组a[10]分配内存2) 如果两个程序都是在分配内存中完成的,那么内存段(我指的是数据段或堆栈段)是在其中分配的。
3) 有人能解释一下程序1和程序2的区别吗?程序1:
- 数组在堆栈上分配
- 因为它在堆栈上并且没有初始化,所以它将包含堆栈上的任何内容;我们称之为垃圾
- 该数组是一个全局数组,在.data节中分配(除非链接器文件中另有指定)
- 它实际上位于.bss部分,该部分通常是.data的一部分。这就是所有未初始化的全局变量结束的地方
- 它将自动初始化为0
在全局声明中,它位于全局数据部分。局部的是在堆栈段,因为函数实例化将一个帧推到堆栈中,该堆栈包含状态信息,如变量等,以及调用函数的函数的返回点 +---------+
|堆叠|
+---------+
|堆…|
+---------+
|全局|
+---------+
|常数…|
+---------+
|代码…|
+---------+
堆栈段的数组在其函数体上具有作用域。它将一直处于活动状态,直到函数处于活动状态。 但是,在该计划结束之前,全球的一个将继续存在。现在,由于函数是main(),因此这两个函数将具有相同的生存期 全局int变量的初始值为0。但是本地的将包含垃圾值(除非初始化)
主要区别在于:全局变量总是初始化为
0
,在第一种情况下a
包含垃圾。在第二种情况下。为什么INTA[10]不用于外部变量声明呢@奥特曼