2012-06-04 3 views
0

여기에 함수 인수에 부작용을 사용하는 재귀 코드가 있습니다. K & R에서 나는 함수가 호출되기 전에 인수에 대한 모든 부작용이 적용된다는 것을 C 표준에서 지정하는 문을 발견했습니다 page no.54 K & R 초판). 그러나 위의 코드에 대한 결과는 모순되었습니다. 누군가 나를 도울 수 있습니까?함수 인수의 부작용

void reverse(int* array,int i,int j) 
{ 
    `int temp; 
    if(i>j) 

    return ; 
    else{ 
    temp=array[i]; 
    array[i]=array[j]; 
    array[j]=temp; 
    //i++; 
    //j--; 
    reverse(array,i++,j--); 
    } 
} ' 

PS : 출력 세그먼트 오류

+0

고마워요 ... – Dhatri

+0

질문에 답이났다면 그걸 표시해주세요. –

+0

부작용으로 프로그래밍하는 것은 정말 나쁜 생각입니다. 이와 같은 것을 쓰는 기능적인 이유가 없으며 그냥하지 마십시오. –

답변

2

효과가 완료된 모든 측면, 그래서 값이며 j는 함수 호출 전에 변경된다.

그러나, 표현 i++j--의 값은 여전히 ​​i 및 j의 값이다.

3

함수 호출 전에 변수가 증가하지만 변수가 선언 된 함수 (이 경우 하나의 순환 함수 호출 프레임)에 국한되어있는 것은 사실이며 접미사 연산자를 사용할 때, 연산자에 의해 반환 된 값은 업데이트 된 값이 아니라 초기 값입니다. 결과적으로 매개 변수로 전달되는 값이 제대로 업데이트되지 않고 함수가 종료되지 않습니다. 변수를 증가시키고 동시에 업데이트 된 값을 반환하고 전달하려면 접두사 연산자 인 ++i++j을 사용해야합니다.