Объясните почему так происходит - C (СИ)
Формулировка задачи:
Ответом к этому коду:
является:
т.е: а<b ? нет, значит , ((1 вопрос) почему выполняется второе действие?), ((2 вопрос) почему выполняется если уже выполнилось "True"), ну почему цифра 7 в конце это понятно.
int a, b, k; a = 10; b = 3;
k = a < b ? 1 : 2 ? 10, printf("xxxxxxx") : 20, printf("vvvvvv");
printf("%d", k);xxxxxxx vvvvvv7
10, printf("xxxxxxx")printf("vvvvvv")Решение задачи: «Объясните почему так происходит»
textual
Листинг программы
k = a < b ? 1 : ((2 ? 10, printf("xxxxxxx") : 20), printf("vvvvvv"));
Объяснение кода листинга программы
В представленном коде используется оператор тернарного условия (условного оператора) и оператор присваивания. Ваш вопрос заключается в том, что происходит в этом коде. Вот объяснение каждого шага:
k = a < b ? 1 : ((2 ? 10, printf(xxxxxxx) : 20), printf(vvvvvv));- Сначала выполняется операция сравнения
a < b. Если она возвращаетtrue(то есть еслиaменьшеb), то следующая часть условного выражения (после?) будет выполнена. В противном случае, еслиaбольше или равноb, будет выполнена другая часть условного выражения. - Если
a < bвозвращаетtrue, то следующая часть условного выражения -((2 ? 10, printf(xxxxxxx) : 20), printf(vvvvvv))- будет выполнена. - Внутри этой части сначала выполняется операция сравнения
2 ? 10. Поскольку2не равно0, то следующая часть (после:) будет выполнена. Таким образом, значение10присваивается переменнойprintf(xxxxxxx). - Затем вызывается функция
printfс аргументомxxxxxxx. Поскольку мы не видим вывода, предположим, что это просто некоторая проверка или действие, выполняемое в этом коде. - После этого выполняется операция сравнения
20 ? 20 : 20. Поскольку20не равно0, то следующая часть (после:) будет выполнена. Таким образом, значение20присваивается переменнойprintf(vvvvvv). - Наконец, вызывается функция
printfс аргументомvvvvvv. Поскольку мы не видим вывода, предположим, что это также проверка или действие, выполняемое в этом коде. - Если
a < bвозвращаетfalse, то вместо всего этого будет выполнена другая часть условного выражения, которая не была представлена в вашем вопросе.
- Сначала выполняется операция сравнения