【问题标题】:way to initialize a boolean array in c99在 c99 中初始化布尔数组的方法
【发布时间】:2019-01-16 12:12:04
【问题描述】:

在 C99 中初始化布尔数组的最佳方法是什么?

也许我可以用这个,我想。

bool f[5] = {false,};

这样真的好吗?

如果有更好的方法,请告诉我。

【问题讨论】:

  • 初始化到什么?什么初始值?并定义“最佳”。除了 char 数组的字符串文字外,只有 一种 方法可以在 C 中显式初始化数组 - 使用 { ... } 初始化程序。没有其他方法。

标签: c boolean c99


【解决方案1】:

如果你想将你的数组初始化为“all false”/“all zeros”初始值,你可以这样做

 bool f[5] = { false };

或者你可以这样做

 bool f[5] = { 0 };

哪种变体是“最好的”由您决定。这里没有明确的“最佳”方式。每个都和另一个一样好。

【讨论】:

  • 它之所以有效,是因为零等于false,如果你想将所有元素初始化为true,则不能使用该方法。
  • @cdarke 你是对的。除了为每个数组元素精心提供一个显式的 true 初始化器之外,没有办法将所有元素初始化为 true
  • 澄清一下:bool f[5] = { false }; 只初始化第一个元素;根据 C 标准,所有其他元素都是“标准初始化的”。
  • @Bugfinger:嗯,它初始化了 all 元素。您可以说它显式 仅初始化第一个元素(因为那是false 所在的位置),而其余的都是隐式 初始化的(false 也是如此)。但最终结果是数组的所有元素都用false 初始化。不,C标准中没有“标准初始化”之类的东西。根据 C 标准,聚合的剩余部分由与静态初始化相同的规则初始化 (port70.net/~nsz/c/c11/n1570.html#6.7.9p10)
  • 我想明确的是,它只将第一个元素初始化为给定值,因为它可能会令人惊讶。所以bool f[3] = { true }; 的结果是 { true, false, false }。
【解决方案2】:

这个问题很老,但如果你在谷歌上搜索“初始化布尔数组”,它仍然是谷歌的第一个结果。作者接受的答案是完全错误的,靠运气而不是设计。这个事实本身就值得一提。

Bugfinger 在 cmets 中指出了这一点,并接受了答案。

您可以通过声明: bool array[4] = { true} 并检查初始化为“0”(假)的 [1]、[2] 和 [3] - 这是正确的并且符合 C99 标准。 "所有未显式初始化的数组元素均为零初始化。"

见: https://en.cppreference.com/w/c/language/array_initialization

【讨论】:

    猜你喜欢
    • 2021-11-22
    • 2016-12-27
    • 2023-03-06
    • 2019-04-18
    • 2011-12-26
    • 1970-01-01
    • 1970-01-01
    • 2015-01-18
    • 1970-01-01
    相关资源
    最近更新 更多