2012-01-19 2 views
6

나는 참고 문헌에 문제가있다. 여기함수 인수로 참조 하시겠습니까?

void pseudo_increase(int a){a++;} 
int main(){ 
    int a = 0; 
    //.. 
    pseudo_increase(a); 
    //.. 
} 

a 변수의 값이 클론으로 증가하지 않거나 그것을 복사 변수 자체가 전달되지 않고,이 번호를 고려 . - 그런데 왜

void true_increase(int& a){a++;} 
int main(){ 
    int a = 0; 
    //.. 
    true_increase(a); 
    //.. 
} 
다음

a의 값이 증가 할 것이다라고 :
지금 우리는 또 다른 예를 살펴 보자?

true_increase(a)이 호출되면 a 사본이 전달됩니다. 그것은 다른 변수가 될 것입니다. 따라서 &a은 실제 주소 인 a과 다를 것입니다. 그렇다면 a 값은 어떻게 증가하나요?

내가 잘못한 부분을 수정하십시오. true_increase (A)를 호출

+1

함수 인수와 전달할 변수에 다른 식별자를 사용하여 혼동하지 않도록해야합니다. – AusCBloke

+1

참조로 전달해도 복사본이 만들어지지 않습니다. 동일한 변수에 대한 참조입니다. – jweyrich

+0

먼저 포인터에 대해 배우고 추천을 통해 참조가 어떻게 초기화되지 않은 객체와 잘못된 포인터 등의 고통을 줄일 수 있는지 알아보십시오. 좋아하는 C/C++ 서적을 선택하십시오! – sarat

답변

6

는 다음과 같은 예를 생각해 보자. b에 할당 된 내용은 a으로 지정되어 있기 때문에 ba을 참조합니다. 매개 변수 by reference를 전달하면 차이가 없습니다 :

당신의 true_increase에
void foo(int &b) 
{ 
    b = 2; 
} 

int main() 
{ 
    int a = 1; 
    foo(a); 
    printf("a = %d\n", a); //output: a = 2 
    return 0; 
} 
5

의 사본 '은'당신이 잘못 어디 그

전달됩니다. a에 대한 참조가 작성됩니다. 매개 변수 유형 옆에있는 것은 &입니다. 참조에 발생하는 모든 조작은 참조 대상에 적용됩니다.

다음 b
int a = 1; 
int &b = a; 
b = 2; // this will set a to 2 
printf("a = %d\n", a); //output: a = 2 

별칭 a에 대한처럼 취급 할 수 있습니다

1

(INT & a) 기능은, 어떤 코드가 내부지고하는 것은 사용자가 지정한 정수 값의 사본이 아닙니다. 정수 값이 컴퓨터 메모리에있는 것과 동일한 메모리 위치에 대한 참조입니다. 따라서 해당 참조를 통해 수행 된 모든 변경 사항은 원래 선언 한 실제 정수가 아니라 해당 사본에 적용됩니다. 따라서 함수가 반환되면 참조를 통해 변수에 대해 수행 한 모든 변경 사항이 원래 변수 자체에 반영됩니다. 이것은 C++에서 참조로 값을 전달하는 개념입니다.

첫 번째 경우에 언급 한 것처럼 원래 변수의 복사본이 사용되므로 함수 내부에서 수행 한 모든 작업이 원래 변수에 반영되지 않습니다.

관련 문제