在以下功能中
语句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';
}
答案 0 :(得分:2)
你的前提是不正确的。表达式s[i] + s[i]==c
相当于(s[i] + s[i]) == c
。因此,它不是“添加char和布尔表达式”。
结果是布尔表达式,但请注意C中没有原始bool
类型。因此,此表达式的类型为int
,其值为1
或0
。因此,s[j]
的值可以是1
或0
。
答案 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。