这个函数中的`if(!found)`是如何工作的?

时间:2015-07-02 04:27:05

标签: c

此函数查找数组中第一个和最后一个整数。我不明白第二个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;

}

3 个答案:

答案 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;
}