2011-03-23 48 views
1

在以下函數中在布爾結果中添加Char和布爾表達式結果?

語句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

你的前提是不正確的。表達式s[i] + s[i]==c相當於(s[i] + s[i]) == c。因此,它不是「添加char和布爾表達式」。

結果是布爾表達式,但請注意,不存在原語類型bool在C.所以這個表達式將是int類型,具有任一10的值。因此,s[j]的值將是10

+0

C有'bool'類型(def),在'stdbool.h'中定義爲'_Bool'。然而'=='運算符的結果是'int'而不是'bool'。 – 2011-03-23 18:04:25

+0

@R ..必須注意'_Bool'在C99中可用,並且在使用C的其他方言時可能不可用。在Objective-C中(C的嚴格超集)有'BOOL'。 – 2011-03-23 18:06:15

+0

@R:是的,你是對的。讓我更新。 – 2011-03-23 18:06:45

0

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上分配的。

+0

-1 + 1 = 0因爲有一個布爾類型,名爲'_Bool',但是您正確表達式 – 2011-03-23 19:10:14

+1

@Jens的返回類型,正如我上面所說的,IMO主要是標準中未使用的部分。就我而言,我從來沒有遇到過使用_Bool的代碼。 – slezica 2011-03-23 19:14:42

+0

如果看到很多使用由「stdbool.h」提供的更方便用戶的衍生產品「bool」。我已經看到很多特殊的TRUE' FALSE'定義,儘管有'true'和'false'可用。 – 2011-03-23 19:23:52