什么是本地定义的结构的默认初始化?

时间:2018-02-04 03:17:26

标签: c

每个领域都会为零吗?

如果是这样,为什么C不对int使用相同的“clean to zero”方法?

2 个答案:

答案 0 :(得分:7)

如果变量具有自动存储 - 局部变量 - 并且未明确初始化,则其状态是不确定的。无论是简单变量(例如int)还是复杂(例如结构或联合),这都适用。

字段无法可靠归零。

C11 §6.7.9 Initialization ¶10

  

如果没有显式初始化具有自动存储持续时间的对象,则其值为   不确定的。

答案 1 :(得分:1)

请注意,static变量会自动初始化为零,包括局部静态变量。

考虑以下示例:

typedef struct
{
    int alpha;
    char bravo;
    float charlie;
}  ThreeVarStruct_T;        // Define a structure

int function(void)  // Local Scope
{
    ThreeVarStruct_T        exampleA; // This will hold uninitialized "random" data
    static ThreeVarStruct_T exampleB; // This is guaranteed to be initialized to zero
}