Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.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_Initialization - Fatal编程技术网

C中两种不同数组初始化之间的差异

C中两种不同数组初始化之间的差异,c,arrays,initialization,C,Arrays,Initialization,在 int array[100][100]; 及 在第一个例子中,当我打印数组的所有元素时,在第94行之后,在中间,我开始获取垃圾值,但之前的所有值都是0,而在第二个例子中,所有值都是0 第一个声明不是也用默认的0值初始化吗?如果不是,为什么数组中的所有值都不是垃圾值?为什么只有在第94行之后才会出现垃圾值 第一个声明是否也使用默认的0值初始化 否。假设这是一个局部作用域变量,您的第一个声明根本不会导致任何初始化 为什么数组中不是所有的值都是垃圾,为什么只有在第94行之后才会出现垃圾值 未初始

int array[100][100];

在第一个例子中,当我打印数组的所有元素时,在第94行之后,在中间,我开始获取垃圾值,但之前的所有值都是0,而在第二个例子中,所有值都是0

第一个声明不是也用默认的0值初始化吗?如果不是,为什么数组中的所有值都不是垃圾值?为什么只有在第94行之后才会出现垃圾值

第一个声明是否也使用默认的0值初始化

否。假设这是一个局部作用域变量,您的第一个声明根本不会导致任何初始化

为什么数组中不是所有的值都是垃圾,为什么只有在第94行之后才会出现垃圾值


未初始化的内存可以有任何值,包括您正在观察的
0
的值。

只有当变量是全局变量时,第一种样式才会导致数据初始化为0。缺少显式初始化的局部变量将等于将空间分配给变量时存储位置中发生的任何事件。

第一次声明不能保证任何初始化,事实上我认为它不会执行任何初始化

在第94个元素之前,您拥有清晰的内存,这是因为操作系统为您提供了一些干净/但未使用的内存


如果要确保内存清晰,必须使用第二个声明,第一个语句中没有显式初始化。如果数组在全局范围内声明,则可以进行隐式初始化


“似乎是半初始化”的原因是,出于安全原因(不访问包含密码等的其他进程的数据),用户空间程序通常以零堆栈/堆启动,但不能保证总是清除局部变量。我们可以保证这不是因为性能原因。即使在C语言中,在调用main之前也可能会发生很多活动:crt0初始化运行时,将静态数据从只读部分复制到全局变量等。其结果是许多程序堆和堆栈不再完整。

首先,对于简单明了的问题+1。现在回答,局部变量如果没有显式初始化,也不会隐式初始化。包含0而不是其他垃圾值的所有93个成员都不是已定义的行为。通过多次执行上述代码,您可以看到不同的垃圾值返回到第一次声明中。为了更好地理解,请进入上述代码的汇编级别,亲自看看内部发生了什么。

int array[100][100]

  if this declaration is in the scope of main i.e in Stack Segment then
此数组的memeory将在堆栈中分配。如果没有人使用这个 堆栈您可能会得到值零,否则它将成为垃圾,而不是垃圾 特定于第94行元素

 if same declaration is in Global, then all the array elements will be
制度化为零

int数组[100][100]={0}

 Irrespective of any segments [Stack/Data(Global,Static)] if any one 
变量在数组中被初始化,那么其余的数组元素将被初始化
初始化为零。

“为什么只有一些是垃圾”=>它们都是垃圾。只是有些垃圾看起来好像不是。读得好:
 Irrespective of any segments [Stack/Data(Global,Static)] if any one