2017-01-21 1 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) 

expression1에 처음 이어서이 expression2 평가되고 평가되고 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; 
} 

더 많은 explaination

a = (1, 2, 3); 

(1,2,3) 하나의 인수가하지만이 할당됩니다

같은?

괄호 쉼표 연산자가 먼저 실행되고, 우리는 쉼표의 전 a 할당 3 그래서 문이 먼저 실행된다 얻고 3
i++ 먼저 다음 실행 귀하의 경우에는

할당되어 있으므로 사용 i은 인수로 전달됩니다.

관련 문제