02-04 09:19
Recent Posts
Recent Comments
관리 메뉴

너와나의 관심사

Call by reference 에서 참조의 의미 본문

카테고리 없음

Call by reference 에서 참조의 의미

벤치마킹 2012. 6. 27. 11:58


 reference 기억공간에 붙여진 이름에 다른 이름( alise) 을 붙이는것 

  즉 기억공간은 하나인데 그 기억공간을 부르는 또 다른 이름을 붙이는것을 말함  

  

  '&'참조 연산자 를 사용

  형식: 자료형 & 참조변수명 = 기존변수명 


Man *pp = p;

Man *&pp = p;


이 둘의 차이는 p값이 new 로 다른 pointer를 가르켜도 아래와 같이 변경이 된다. 

Man *&pp = p;

pp값은 p = new Man ; 

이렇게 할당이 다시 일어나도 pp 값은 따라서 변경하게 된다.



  

  예

    int n = 10;

    int & k = n ;

    

  단항 연산자인 번지 연산자(&) 와 구별하는 방법은 

  & 연산자 좌측에 자료형이 오면 참조 연산자로 사용된것 이라 판단

  

  Reference 를 함수의 인자 전달에 적용한것을 Call by reference 라 한다.


  함수의 return 값이 reference 형인 경우도 있는데 

  이경우에는 값을 되돌리기 위해 임시 기억공간을 만들지 않고 되돌리려는 

  변수의 기억공간 자체가 return 이 된다.

  

  참조형 return 

  

  int & sub(void);

  int & temp = sub();


  sub = 500;

 

  저 함수 sub 에 imsi 로 변수에 값을 입력하는데 그 값은 같은 주소를 가르키는 

  참조형 변수라 결국 temp 변수와 같은 주소를 가르키며 같은 값을 가지고 

  sub 에 500값을 입력을 하게 되면  temp값도 같이 변경이 된다.



함수 중에 이렇게 구현이 되면 생성자가 두번 불리는게 아니라 저 temp가 불리게 된다 

물론 warning 은 날수 있는데 value 를 return 하는 경우와 차이점인 class 를 하나 만들고 다시 생성자를 만든 과정이 없으며 

메모리가 절약되고 생성자와 소멸자가 불리지 않는다.


func.output();


Man & func(void)

{

Man temp;

temp.output();

return temp;

}


}

Comments