Как объяснить «x = (a = 3, b = a)» в c ?

#c

#c

Вопрос:

Существуют полные коды. И результат всегда будет «4 4 4».

 #include <iostream>

int main() {
    int a = 1;
    int b = 2;
    int x = (a = 3, b =   a);
    std::cout << a << ' ' << b << ' ' << x << std::endl;
    return 0;
}

 

Комментарии:

1. Я бы объяснил это как код, который вы никогда не должны писать.

2. Операции имеют порядок, вы можете найти его в любом учебнике или руководстве. Следуя этому порядку, первая операция, выполняемая в a = 3 , затем a принимает a значение, равное 4, затем b присваивается новому значению a (то есть 4), затем x присваивается новому значению b , равному 4

3. Эта строка int x = (a = 3, b = a); эквивалентна a = 3; b = a; int x = b; so 4 4 4 вывод — это то, что вы ожидаете.

4. Я думаю, вы думаете, что a это должно произойти в первую очередь. Это неверно, a = 3 происходит первым.

Ответ №1:

Выражение (a = 3, b = a) вычисляется слева направо, а значение b = a — это то, которое само по себе имеет значение b . Это присваивается x . Другими словами x , будет таким же, как b .

Кроме того, оператор разделителя выражений , является точкой последовательности, что означает, что a = 3 он завершается до вычисления b = a .

a следовательно, равно 4, и это присваивается b , объясняя вывод.