我有以下代码:
int isUsed[6] = {1,1,1,1,1,1};
Run Code Online (Sandbox Code Playgroud)
如何比较此数组中的所有元素是否等于1?还是其他价值?我知道我们可以循环数组并逐一比较它,但我们还有其他方法吗?
unw*_*ind 12
是的,你必须逐个元素地做.
如果你的数组只包含纯整数类型(即不是structs 的数组),你只想检查是否相等,你可以使用memcmp().
这当然是在内部循环,但它是一个预制的标准功能,因此它有助于提高可读性.它可能会损害性能,因为它比较了chars.另一方面(在评论之后)它可能会获得性能,因为它是一个可能被优化的着名库函数.
另外,为了完整性,我之所以注意struct上面没有s 的原因是结构通常包含填充字节,这将被"看到" memcmp()并且可能导致不正确的结果.
例如:
struct {
int x;
char y;
int z;
} a = { 1, 2, 3 }, b = { 1, 2, 3 };
Run Code Online (Sandbox Code Playgroud)
在许多系统上,上面struct会有y和之间的填充z,这可能会导致错误的结果,memcmp()因为填充字节有未定义的值.