Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 变量/数组的行为_C_Arrays_Storage - Fatal编程技术网

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:

  • 数组在堆栈上分配
  • 因为它在堆栈上并且没有初始化,所以它将包含堆栈上的任何内容;我们称之为垃圾
方案2:

  • 该数组是一个全局数组,在.data节中分配(除非链接器文件中另有指定)
  • 它实际上位于.bss部分,该部分通常是.data的一部分。这就是所有未初始化的全局变量结束的地方
  • 它将自动初始化为0
  • 对!!这两个程序都将为数组a[]分配内存
  • 共有4个段-(全局段+恒定段)=(数据段)
    在全局声明中,它位于全局数据部分。局部的是在堆栈段,因为函数实例化将一个帧推到堆栈中,该堆栈包含状态信息,如变量等,以及调用函数的函数的返回点

    +---------+
    |堆叠|
    +---------+
    |堆…|
    +---------+
    |全局|
    +---------+
    |常数…|
    +---------+
    |代码…|
    +---------+

  • 现在在第一种情况下,它位于堆栈段中。在第二种情况下,在内存的全局段中。
    堆栈段的数组在其函数体上具有作用域。它将一直处于活动状态,直到函数处于活动状态。 但是,在该计划结束之前,全球的一个将继续存在。现在,由于函数是main(),因此这两个函数将具有相同的生存期

    全局int变量的初始值为0。但是本地的将包含垃圾值(除非初始化)


  • 主要区别在于:全局变量总是初始化为
    0
    ,在第一种情况下
    a
    包含垃圾。在第二种情况下。为什么INTA[10]不用于外部变量声明呢@奥特曼