【发布时间】:2019-01-16 12:12:04
【问题描述】:
在 C99 中初始化布尔数组的最佳方法是什么?
也许我可以用这个,我想。
bool f[5] = {false,};
这样真的好吗?
如果有更好的方法,请告诉我。
【问题讨论】:
-
初始化到什么?什么初始值?并定义“最佳”。除了
char数组的字符串文字外,只有 一种 方法可以在 C 中显式初始化数组 - 使用{ ... }初始化程序。没有其他方法。
在 C99 中初始化布尔数组的最佳方法是什么?
也许我可以用这个,我想。
bool f[5] = {false,};
这样真的好吗?
如果有更好的方法,请告诉我。
【问题讨论】:
char 数组的字符串文字外,只有 一种 方法可以在 C 中显式初始化数组 - 使用 { ... } 初始化程序。没有其他方法。
如果你想将你的数组初始化为“all false”/“all zeros”初始值,你可以这样做
bool f[5] = { false };
或者你可以这样做
bool f[5] = { 0 };
哪种变体是“最好的”由您决定。这里没有明确的“最佳”方式。每个都和另一个一样好。
【讨论】:
false,如果你想将所有元素初始化为true,则不能使用该方法。
true 初始化器之外,没有办法将所有元素初始化为 true。
bool f[5] = { false }; 只初始化第一个元素;根据 C 标准,所有其他元素都是“标准初始化的”。
false 所在的位置),而其余的都是隐式 初始化的(false 也是如此)。但最终结果是数组的所有元素都用false 初始化。不,C标准中没有“标准初始化”之类的东西。根据 C 标准,聚合的剩余部分由与静态初始化相同的规则初始化 (port70.net/~nsz/c/c11/n1570.html#6.7.9p10)
bool f[3] = { true }; 的结果是 { true, false, false }。
这个问题很老,但如果你在谷歌上搜索“初始化布尔数组”,它仍然是谷歌的第一个结果。作者接受的答案是完全错误的,靠运气而不是设计。这个事实本身就值得一提。
Bugfinger 在 cmets 中指出了这一点,并接受了答案。
您可以通过声明:
bool array[4] = { true}
并检查初始化为“0”(假)的 [1]、[2] 和 [3] - 这是正确的并且符合 C99 标准。 "所有未显式初始化的数组元素均为零初始化。"
见: https://en.cppreference.com/w/c/language/array_initialization
【讨论】: