컴퓨터공부/C & C++ & STL

참조자의 오묘함

achivenKakao 2007. 10. 1. 19:47

다음의 결과를 예측해 보세요!!

정답은 밑에..

+

#include <stdio.h>

int x;

int& f(int p)
{
 p++;
 x = p;
 return x;
}

void main()
{
 int y = 10;
 x = 12345;  // 여기를 바꿀 것

 f(y) = f(1) + 10;

 printf("result = %d\n",x);
}

+

해설  ↓↓↓↓

#include <stdio.h>

1: int x;

2: int& f(int p)
3: {
4:  p++;
5:  x = p;
6:  return x;
7: }

8: void main()
9: {
10:  int y = 10;
11:  x = 12345;  // 여기를 바꿀 것

12:  f(y) = f(1) + 10;

13:  printf("result = %d\n",x);
14: }

+

정답 : ( 12  )

설명 : 참조자는 오른쪽(R-value)에 쓰일때와 왼쪽(L-value)에 쓰일때 사용이 틀리게 된다.
         L-value : 변수로 사용할 수 있다.
         R-value : 말그대로 참조자가 되어서, 그 주소 안의 값이 된다.
          => r=&a // a의 주소안의 값이 참조자 r 에 대입될 뿐이다. => 주소가 아니라 주소안의 값이다.
         초기선언이 'int &r' 이면 그 뒤로는 'r'이 독립적인 일반 변수처럼 사용됨.

저기 위에 코드를 해석하면 6번째 줄에서 'return x'인데 2번째 줄에서 리턴형이 'int &' 으로 되어 있으니

12번째 코드로 돌아오면 'int &x = ??'가 되어 버린다.

그러므로 12번째의 'f(1) + 10'의 결과가 '12' 이므로 'int &x = 12'라는 결과를 낳는다.