添加Char和布尔表达式会导致布尔结果吗?

时间:2011-03-23 17:54:43

标签: c boolean

在以下功能中

语句s[i] + s[i] == c;导致零或一(布尔结果)。

我的问题:将上面的表达式转换为布尔表达式吗?它正在考虑s[i]

的价值
void func(char s[], int c)
{
    int i, j;
    for (i = j = 0; s[i] != '\0'; i++)
        if (s[i] != c)
            s[j++] = s[i] + s[i] == c;
    s[j] = '\0';
}

2 个答案:

答案 0 :(得分:2)

你的前提是不正确的。表达式s[i] + s[i]==c相当于(s[i] + s[i]) == c。因此,它不是“添加char和布尔表达式”。

结果是布尔表达式,但请注意C中没有原始bool类型。因此,此表达式的类型为int,其值为10。因此,s[j]的值可以是10

答案 1 :(得分:-1)

C中没有布尔类型,至少除非您深入了解标准中未使用的部分。

在语义上具有布尔值的表达式由编译器管理为int,值为1(对于true)和0(对于false)。然后,您可以将该值分配给char,它将被适当地降级/降级。

此:

char a, b, c;
a = (b == c);

像这样工作:

char a, b, c;
a = (b == c) ? 1 : 0;

1和0都是整数类型,在赋值时降级为char。