2016-07-23 3 views
2

Я наткнулся на фрагмент кода, который использовал в нем заявление int k=(a++,++a). Я не понимаю, какой тип оператора это (a++,++a) и как он будет оцениваться. Почему здесь используется скобка? Это вызов функции?Как будет оцениваться следующий код в C?

Вот код.

#include <stdio.h> 
int main(void) { 
    int a=5; 
    int k=(a++,++a); 
    printf("%d\n",k); 
    return 0; 
} 

Выход, который я получаю, - 7 - почему это так?

+0

Вы уверены, что код есть? int k = (a ++, ++ a); компилируется исходный код? –

+1

да, и о/р приходит как '7' – a874

+3

@LeonidasMenendez Я совершенно уверен, что написано правильно. Он использует запятую. – WhozCraig

ответ

6

Это не вызов функции.

Это пример использования оператора запятой, который оценивает каждое выражение слева направо и возвращает результат самого правого выражения. Это то же самое, как написание

a++; 
k = ++a; 

Если бы было написано

k = a++, ++a; 

, то он был бы разобранной, как

(k = a++), ++a; 

и оценены, как

k = a++; 
++a; 
0

Да ты являются правильными; поэтому следующий код

int main(void) { 
    int y=1,x=0; 
    int l=(y++,x++)?y:x; 
    printf("%d ",l); 
    return 0; 
} 

производит 1 как выход.

Значение (y++,x++) возвращается x т.е. крайнего правого выражения и, следовательно, значение l становится 1.

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