2017-01-21 4 views
3

я получил этот вопрос с веб-сайта с просьбой дать выход кодаПереходя два значения в скобках в одной функции аргумента

void reverse(int i) 
{ 
    if (i > 5) 
     return ; 
    printf("%d ", i); 
    return reverse((i++, i)); 
} 
int main(int argc, char *argv[]) { 
    reverse(1); 
    return 0; 
} 

Выход 1 2 3 4 5

но reverse функция вызывается рекурсивно проходит два значения в скобках. Как здесь работают приоритеты и ассоциативность?

ответ

5

, в (i++, i) является оператором запятой. Его операнды оцениваются слева направо. Он оценивает i++, значение i получает приращение, а значение выражения i++ отбрасывается, а затем приращение значения передается функции. Таким образом, в конечном счете, только один аргумент передается функции reverse.

4

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

3

Согласно haccks, здесь находится запятая.

Выражение:

(i++, i) 

Первый выражение1 оценивается, то Выражение2 оценивается, а значение expression2 возвращается для всего выражения.

1

Explaination:

void reverse(int i) 
{ 
    if (i > 5) 
     return ; 
    printf("%d ", i); 
    return reverse((i++, i)); // it's single arument that is (i++ , i) 
} 
int main(int argc, char *argv[]) { 
    reverse(1); 
    return 0; 
} 

Больше объяснений, как

a = (1, 2, 3); 

(1,2,3) это единственный аргумент, но то, что относится к?

скобка используется так запятая оператор выполняется первым и мы получаем a назначен как 3 так заявления до запятых лет выполняются первым и 3 присваиваются

В вашем случае
i++ выполняется первым, а затем i передается в качестве аргумента

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