다음의 결과를 예측해 보세요!!
정답은 밑에..
+
#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'라는 결과를 낳는다.