数组初始化后的样子

时间:2019-08-23 00:39:25

标签: c arrays

我正在研究K&R的C书,遇到了一些关于以下方面的问题:

1。数组初始化后的外观如何。例如:

int word_lengths[10];

这是否以[0,0,0,0,0,0,0,0,0,0,0]开头?或[null,null,null,null,null,null,null,null,null,null]。还是有所不同?基本上,我试图在设置值之前概念化一个数组。

然后2.是否需要执行以下操作来初始化0上的所有内容,或者这是自动完成的,并且仅在定义数组中的元素时才显式使用?

// initialize the array
for (int i=0; i<10; i++ ){
    ndigit[i] = 0;
}

1 个答案:

答案 0 :(得分:5)

默认情况下,初始化自动数组。全局和静态数组都初始化为所有0

因此,如果您有这样的程序:

int global_array[10];

int main(int argc, char *argv[]) {
    int local_array[10];
    // code here
    return 0;
}

global_array将被初始化,就像您写过一样

int global_array[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};

但是local_array包含未指定的值。您可以按照显示的循环进行操作。在初始化之前读取值会导致未定义的行为。

您还可以在初始化列表中仅指定一个值;它将其余所有默认设置为0。所以你可以这样写:

int local_array[10] = {0};

等效于

int local_array[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};

所有这些都不是特定于数组的,标量值和结构也是如此。自动变量未初始化,全局变量和静态变量初始化为0