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

时间:2016-12-02 20:34:53

标签: c arrays

所以当我用编程语言c创建一个数组时,最初初始化为的所有元素是什么?例如,

char array[5];

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

3 个答案:

答案 0 :(得分:3)

“最初的元素是什么”将取决于数组的定义位置和方式。

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

char a[5]; /* zeros */

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

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

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

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

NSComparisonResult

请注意,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 个对象或全局范围对象具有默认的零初始化。