C++ 在函数中返回错误的 boolean 值

标签 c++ function boolean

<分区>

我正在编写一个函数来检查数组的所有值是否为真。如果我写

int main(){
bool Janmaat[3]={true, true, true};

int size_arr=sizeof(Janmaat)/sizeof(Janmaat[0]);
bool value=true;
int i;

for(i=0;i<size_arr;i++){
    if(!Janmaat[i]){
        value=false;
    }
}
cout<<value;
return 0;
}

值保持为真。如果我将它封装到一个函数中

bool all_true(bool arr[]){

int size_arr=sizeof(arr)/sizeof(arr[0]);
bool value=true;
int i;

for(i=0;i<size_arr;i++){
    if(!arr[i]){
        value=false;
    }
}

return value;

}

int main(){

bool Janmaat[3]={true, true, true};

cout<<all_true(Janmaat);
return 0;
}

它返回错误。怎么回事?

最佳答案

当一个数组被传递给一个需要指针的函数时,它会自动退化为一个指针。这意味着数组不能按值传递。 arr 来自 all_true 是一个指针。因此,sizeof(arr) 将生成指针 的大小,而不是整个数组。

不同的处理方式:

  1. 将大小作为参数传递。将声明更改为

    bool all_true(bool arr[], size_t size)
    

    并相应地调整代码。

  2. 传递 std::arraystd::vector(std::bitset 在技术上也是可行的)。由于这是 C++,这无疑是更好的选择。


注意事项:

  • 如果一个元素是falseall_true 肯定会返回false。要缩短运行时间,您可以立即在 if 语句中return false;

你知道 Linus Torvalds 吗?发明 Linux 并经常侮辱 Linux 内核“开发人员”的人(有些人值得双引号;有些则不需要)?
<强> This那时您可能会感兴趣。 :-)

关于C++ 在函数中返回错误的 boolean 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34442248/

相关文章:

c++ - 如何以五个数字的行显示输出?

c++ - for循环中i++和++i的区别

sql - 作用于 CTE 结果的 PostgreSQL 函数/ View ?

function - 有没有办法在 MATLAB 中执行函数内联?

python - 确定两个或多个 boolean 评估全部为 False 的 pythonic 方法是什么?

c++ - 寻找素数代码c++

go - 检查是否在 Go 中设置了 boolean 值

c++ - 模板类中模板类的结构体

javascript - 如何在另一个函数中使用 map 函数和箭头函数?

c++ - 验证器断言失败