【发布时间】:2022-11-30 03:22:43
【问题描述】:
我正在尝试根据顺序比较两个数组的元素,例如:
bool compare_arr(int *a, int *b)
{
for (int i = 0; i < 3; i++)
{
if (a[i] != b[i]) // !!!
{
return false; // !!!
}
}
return true; // !!!
}
int main(void)
{
int a[] = {2, 0, 4};
int b[] = {2, 3, 4};
if (compare_arr(a, b))
{
printf("arr elements are equal in order\n");
}
else
{
printf("arr elements are different in order\n");
}
}
它给了我arr elements are different in order(右)
但是如果我改变布尔表达式:
bool compare_arr(int *a, int *b)
{
for (int i = 0; i < 3; i++)
{
if (a[i] == b[i])
{
return true;
}
}
return false;
}
它给了我arr elements are equal in order(错误)
在我看来,两个 bool 表达式具有相同的逻辑,但如您所见,结果不同。
【问题讨论】:
-
如果遇到两个相等的元素(即使是第一个),第二个将立即返回 true。并且只有在以下情况下才会返回 false他们全部是不平等的。绝对不是你想要的。
-
在这种情况下,调试器将是黄金!