我正在编写一个函数来检查数组的所有值是否都为真。如果我写
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。发生了什么事?
答案 0 :(得分:3)
当数组传递给期望指针的函数时,它会自动衰减到指针。这意味着数组不能通过值传递。来自arr
的all_true
是指针。因此sizeof(arr)
会产生指针的大小,而不是整个数组。
处理此问题的不同方法:
将大小作为参数传递。张宣言
bool all_true(bool arr[], size_t size)
并相应调整代码。
通过std::array
或std::vector
(std::bitset
在技术上也是可行的)。由于这是C ++,这肯定是更好的选择。
注意:
false
,all_true
肯定会返回false
。要缩短运行时间,您可以立即在return false;
语句中if
。Y&#39;知道Linus Torvalds?发明Linux的人经常侮辱Linux内核&#34;开发人员&#34; (有些人应该使用双引号;有些人不应该这样做?) This可能会让您感兴趣。: - )