2013-05-18 2 views
3
void calculate(){ 

    int x=3, y=3, z=1; 

    printf("%d\n",z+=x<y ? 10:20); 

} 

Приведенный выше код печатает 21.Tricky троичный Работа в C

Я понимаю, что во-первых, программа будет оценивать х < у => 0, то г = г + 0 = 1, не должны программа печатает 10 потому что 1 - другая форма истины.

Программа четко выбрала второй вариант, и она также увеличивает его до 21, может кто-то объяснить?

ответ

12

Условный оператор имеет более высокий приоритет, чем оператор присваивания.

z+=x<y ? 10:20

оценивается как

z+= (x<y ? 10:20)

Вы можете получить сводку операторов C старшинства здесь:

http://www.kernel.org/doc/man-pages/online/pages/man7/operator.7.html

+0

-1 для дезинформации (я не могу ниспровергнуть хотя бы). Условный оператор не имеет более высокого приоритета, чем назначение. Вот почему int x = 3, y = 5; x kotlomoy

+0

http://stackoverflow.com/questions/7499400/c-ternary-conditional-and-assignment-operator-precedence – kotlomoy

+2

@kotlomoy Во-первых, вы не понимаете, что означает слово «дезинформация», во-вторых, вы не понимаете свою собственную цитату. Вы даже потрудились прочитать цитату оуа, или языковой стандарт, или любой другой источник по приоритету С, все из которых подтверждают, что условный оператор имеет более высокий приоритет, чем назначение? –

3

Сначала оценивает х меньше у. Так как х = 3 и у = 3, это неверно, так оценивает 20.

Поскольку г уже = 1, вы добавляете 20 к нему:

z += 20

z = z + 20

z = 1 + 20

Смежные вопросы