我正在研究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;
}
答案 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
。