【问题标题】:Uninitialized Array in C programming [duplicate]C编程中的未初始化数组[重复]
【发布时间】:2019-12-06 03:50:48
【问题描述】:

我对未初始化的数组感到困惑。每当我初始化像这样int array[10]; 的数组时,不应用任何值,然后打印这个未初始化的数组。该数组的第一个元素将始终是垃圾值(例如 printf("%d",array[0]); 将是一些垃圾值)。但其他值,例如从array[1]array[10] 将默认初始化为zero(0)

谁能解释为什么?

【问题讨论】:

  • int array[10]; 这定义了一个数组,但绝不会初始化它(假设它不是全局/静态变量)。 “但其他值,例如从 array[1] 到 array[10] 将默认初始化为零(0)”。不,他们不会。访问未初始化的变量是未定义的行为,仅仅因为你看到 0 并不意味着它永远是 0。
  • 另外,请注意您为问题使用的标签。仅使用相关的语言标签。例如,不清楚为什么python用于这个问题。
  • Re "其他值,例如从数组[1] 到数组[10]",int array[10]; 中没有array[10]。访问 array[10] 是未定义的行为。数组索引是偏移量,所以对于int array[10];,它们从 0 到 9

标签: c arrays computer-science garbage


【解决方案1】:
int array[10]; // defined, not initialized
int array[10]={1,2,3,4,5,6,7,8,9,0}; // defined and initialized

【讨论】:

    【解决方案2】:

    基于堆栈的数组 - 数组 [1] 为 0 只是随机巧合。除非您明确清零,否则这些值是未定义的。顺便说一句,当数组大小为 10 时,array[10] 越界。

    https://docs.microsoft.com/en-us/cpp/cpp/arrays-cpp?view=vs-2019

    如果您不指定默认值,则每个元素最初将包含该位置发生的任何随机值。

    【讨论】:

    • 提供 C++ 文档来回答 C 问题是次优的。
    猜你喜欢
    • 1970-01-01
    • 2016-06-12
    • 1970-01-01
    • 2016-03-12
    • 1970-01-01
    • 1970-01-01
    • 2012-09-29
    • 2013-02-22
    • 1970-01-01
    相关资源
    最近更新 更多