【问题标题】:C struct array default values [duplicate]C struct数组默认值[重复]
【发布时间】:2015-10-01 17:32:38
【问题描述】:

我有这个结构:

typedef struct {
    GPIO_TypeDef* GPIO_Reg;
    uint16_t GPIO_Pin;
    uint16_t status;
} PinType;

那么如果我声明这个数组:

PinType array[10];

数组中的PinType元素被初始化为一些默认值?

例如,如果我这样写:

printf("%d", array[1].status);

我应该看到0 作为输出吗?还是初始值取决于我声明数组之前的内存内容?

【问题讨论】:

    标签: c arrays struct initialization


    【解决方案1】:

    这个答案取决于变量的范围。

    • 如果array 是全局的,那么它将被自动初始化。
    • 如果arraystatic,所有元素将自动初始化为0
    • 如果array属于automatic存储,则不会自动初始化。

    【讨论】:

    • 加一;第一个经常被遗忘
    • 所以如果我的数组是全局的,如果我尝试这样做 printf 我应该总是收到一个“0”吗?如果这是真的,这是我可以依赖的功能吗?我的意思是,它在某种程度上依赖于编译器还是由 C 标准定义?
    【解决方案2】:

    结构成员初始化,除非变量是static 或全局变量。

    事实上,使用未初始化的成员是 C 中未定义的行为。

    memset使用零数组是惯用的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-02
      • 1970-01-01
      • 2015-05-24
      • 1970-01-01
      • 2014-06-11
      • 2014-02-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多