Как условный оператор меняет значение переменной b в программе ниже? - PullRequest
0 голосов
/ 14 декабря 2018
#include<stdio.h>
int main()
{
    int a = 0, b = 1, c = 2;
    *((a+1 == 1) ? &b : &a) = a ? b : c;
    printf("%d, %d, %d\n", a, b, c);
    return 0;
}

Вывод программы равен 0, 2, 2. Как условный оператор меняет значение переменной b в C?

1 Ответ

0 голосов
/ 14 декабря 2018

Давайте посмотрим на эту строку:

*((a+1 == 1) ? &b : &a) = a ? b : c;

(a+1 == 1) равно 1, так что это становится

*(1 ? &b : &a) = a ? b : c;

То есть

*(&b) = a ? b : c;

Так как a по-прежнему 0, то есть

*(&b) = c;

Это означает, что адрес b взят, а значение, на которое он указывает (b), установлено на c,что 2.Итак, в конце концов, то, что он делает, меняется b на 2.

Если троичный оператор (?) смущает вас, вы можете прочитать об этом здесь .

...