为什么每个值都没有初始化为 0?

Kan*_*ang 5 c arrays initialization storage-duration

#include <stdio.h>

int main(void) {
    int memo[1000];
    for (int i = 0; i < 1000; i++) {
        printf("%d\t", memo[i]);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我认为一切都应该初始化为 0 但事实并非如此。这有什么原因吗?非常感谢你的帮助。

chq*_*lie 6

本地定义并自动存储在函数体中的对象在 C中未初始化。这些值可以是任何东西,包括某些体系结构上的陷阱值,这些值仅通过读取它们就会导致未定义的行为。

您可以将此数组初始化为int memo[1000] = { 0 };. 第一个元素被显式初始化为0,其余0所有元素也将被初始化为 ,因为任何缺少初始化器的元素都将被设置为0

为完整起见,int memo[1000] = { 42 };将其第一个元素设置为42,其余所有元素设置为0。类似地,C99 初始值设定项int memo[1000] = { [42] = 1 };将其第 43 个元素设置为1并且所有其他元素都设置为0

  • @CEPB:是的,K&amp;R C 不允许初始化自动数组(参见 K&amp;R I 第 83 页)。这大致符合每行代码都应该是 O(1) 的理念(例如,您也不能分配结构或按值传递它们,因为这可能需要复制任意大的内存块)。C89 脚注 65 明确指出初始化所有自动对象的能力是新的。 (2认同)