此函数查找数组中第一个和最后一个整数。我不明白第二个if语句if(!found)
与if(found==0)
是否相同?第二个陈述如何'找到'第一次出现?假设如果一个数组中有3个4,则循环找到最后一个匹配并将其设置为plast
,然后进入第二个if语句,它如何知道找到第一个匹配而不是第二个匹配?< / p>
find_occurences(const int a[], size_t n, int x, size_t *pfirst, size_t *plast) {
size_t i;
int found = 0;
for(i=0; i<; i++)
if (a[i] == x)
*plast = i;
if (!found) {
*pfirst = i;
found = 1;
}
}
return found;
}
答案 0 :(得分:3)
在C
中,0
表示boolean false
,其他任何非零值都被视为boolean true
。
因此,如果if (!found)
,found = 0
将转到 true 路径。
if(!found)
和if(found==0)
一样吗?
是的!
答案 1 :(得分:1)
根据您的描述,您的来源应如下所示:
find_occurences(const int a[], size_t n, int x, size_t *pfirst, size_t *plast)
{
size_t i;
int found = 0;
for (i=0; i<n; i++) // go through all items from first to last
{
if (a[i] == x) // if the item is the searched one ...
{
*plast = i; // mark as last (every time one is found)
//foundlast = 0; not needed
if (!found) // if there hasn't been one found yet ...
{
*pfirst = i; // mark as first
found = 1; // will never enter this if again, thus only on first
}
}
}
}
我认为你有一些复制粘贴错误。
并解决您的主要问题:C中的所有非零值都会在true
语句中生成if
。
我建议您查看此related question以获得澄清。
答案 2 :(得分:0)
在C
if(!found){
//This statements works only when "found" equal to 0
}
相反
if(found){
//This statement works only when "found" not equal to 0
}
在c ++中我们可以使用bool作为布尔变量......现在假设
bool found
if(!found){
//This statement works when found = false;
}