Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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 - Fatal编程技术网

制作数组后,C中的数组元素初始化为什么?

制作数组后,C中的数组元素初始化为什么?,c,arrays,C,Arrays,因此,当我用编程语言c创建一个数组时,所有元素最初初始化为什么?比如说, char array[5]; 创建一个包含5个元素的数组。最初的要素是什么?我打印出了元素,但它似乎是随机的,所以它们只是随机创建的,还是有一种方法来制作它们?未初始化数组(或任何未初始化对象)的内容尚未确定。访问它们会调用未定义的行为 char a[5], b[5] = {1, 2, 3, 4, 5}, c[5] = {42}; printf("%d\n", a[1]); // UB printf("%d\n", b[

因此,当我用编程语言c创建一个数组时,所有元素最初初始化为什么?比如说,

char array[5];

创建一个包含5个元素的数组。最初的要素是什么?我打印出了元素,但它似乎是随机的,所以它们只是随机创建的,还是有一种方法来制作它们?

未初始化数组(或任何未初始化对象)的内容尚未确定。访问它们会调用未定义的行为

char a[5], b[5] = {1, 2, 3, 4, 5}, c[5] = {42};
printf("%d\n", a[1]); // UB
printf("%d\n", b[1]); // 2
printf("%d\n", c[1]); // 0
请注意,静态对象或全局范围对象具有默认的零初始化。

初始元素是什么取决于数组的定义位置和方式

在块作用域中定义的自动数组将包含垃圾。同时,静态数组将初始化为零

char a[5]; /* zeros */

int main()
{
  static char b[5]; /* zeros */

  char c[5]; /* garbage */
}

如果数组被声明为结构成员,则上述规则适用于包含结构对象的定义。

这取决于初始化它们的位置

  • 全局:数组中的所有值都将为0
  • 本地:这些值将是一些垃圾值。它是随机的

您在哪里声明了阵列?在区块范围内?在文件范围内?“我打印了元素,但它似乎是随机的”-->发布代码及其输出比描述代码和输出更有用。嗯,对于未初始化的
无符号字符[]
,没有UB例外吗?像
无符号字符uc[1];printf(“%u\n”,uc[0]*0)可以吗?我相信有@chux;我在打电话,现在无法检查标准。