memset bool 数组的正确性如何

问题描述 投票:0回答:1

我有 bool 数组,我想将所有元素初始化为 false。使用 memset 的正确方法是什么?我在 stackoverflow 上看到这些例子:

bool arr[10];
memset(arr,0,sizeof(arr));

bool arr[10];
memset(arr,0,sizeof(bool) * 10);

有什么区别,哪种方式是正确的,或者两者都可以?

c++ arrays boolean memset
1个回答
0
投票

两者都是正确的,但第一个更干净。

bool arr[10];
memset(arr,0,sizeof(arr));

这会将

arr
设置为所有位为零。该标准保证对于任何整数类型,所有位为零都是
0
的表示。我会写
sizeof arr
而不是
sizeof(arr)
sizeof
是运算符,而不是函数),但两者都是有效的。

bool arr[10];
memset(arr,0,sizeof(bool) * 10);

这也是有效的,因为根据定义,数组的大小是其长度乘以其元素类型的大小。但是您重复该值

10
,如果您稍后更改数组的大小,这会使代码容易出错。

还有一点:在当前的C中,

bool
不是预定义的类型。 C 自 1999 年起就有了
_Bool
,并在
bool
中定义了宏
<stdbool.h>
;你包含那个标题了吗?尚未发布的 2023 年标准将使
bool
成为关键字和预定义类型名称,但尚不支持。或者您或您正在使用的某些库是否定义了自己的
bool
类型?这可能并不重要,因为任何合理的布尔类型都会将 false 表示为全位为零,但显示一个小型、完整、独立的程序仍然是一个好主意,这样我们就可以确定发生了什么。

© www.soinside.com 2019 - 2024. All rights reserved.