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

时间:2015-12-23 19:13:35

标签: 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;
}

它返回false。发生了什么事?

1 个答案:

答案 0 :(得分:3)

当数组传递给期望指针的函数时,它会自动衰减到指针。这意味着数组不能通过值传递。来自arr all_true是指针。因此sizeof(arr)会产生指针的大小,而不是整个数组。

处理此问题的不同方法:

  1. 将大小作为参数传递。张宣言

    bool all_true(bool arr[], size_t size)
    

    并相应调整代码。

  2. 通过std::arraystd::vectorstd::bitset在技术上也是可行的)。由于这是C ++,这肯定是更好的选择。

  3. 注意:

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

    Y&#39;知道Linus Torvalds?发明Linux的人经常侮辱Linux内核&#34;开发人员&#34; (有些人应该使用双引号;有些人不应该这样做?) This可能会让您感兴趣。: - )