Результатом добавления Char и Boolean Expression является логический результат? - PullRequest
1 голос
/ 23 марта 2011

В следующей функции

Оператор 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 ]

2 голосов
/ 23 марта 2011

Ваша предпосылка неверна. Выражение s[i] + s[i]==c эквивалентно (s[i] + s[i]) == c. Следовательно, это не «добавление char и логического выражения».

Результатом является логическое выражение, но обратите внимание, что в C. нет примитивного типа bool. Таким образом, это выражение будет иметь тип int со значением 1 или 0. Следовательно, значение s[j] будет либо 1, либо 0.

0 голосов
/ 23 марта 2011

В C нет логического типа, по крайней мере, если вы не погрузитесь в большинство неиспользуемых частей стандарта.

Выражения, которые с точки зрения семантики имеют логические значения, управляются компилятором как int s со значениями 1 (для истины) и 0 (для ложных значений). Затем вы можете присвоить это значение char, и оно будет соответственно понижено или понижено.

Это:

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

Работает так:

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

И 1, и 0 имеют целочисленный тип, пониженный до char при назначении.

...