c를 배우자 카페에서 사람들이 문제를 내고 댓글로 소스올려서 맞추고를 한다.
문제는 int형 변수2개 10,20 초기화 -> 포인터변수 2개만들어서 위의 int형 2개를 각각 가리키고
-> 더블포인터 변수 2개만들어서 포인터2개가 각각 가리키게 이것을 만족후
더블포인터를 이용하여 두변수의 값을 서로바꾸어라.. 함수사용 제한없음
그리하여 많은 댓글중 다른방법은 없을까?하여 레퍼런스를 한번 가지고놀기를 해봤다.
#include <cstdlib>
#include <iostream>
using namespace std;
void SwapInt(int& ref1, int& ref2)
{
int Set = 0;
int& temp = Set;
temp = ref1;
ref1 = ref2;
ref2 = temp;
}
int main(int argc, char *argv[])
{
int iA = 10, iB = 20;
int *pA, *pB;
int **ppA, **ppB;
pA = &iA;
pB = &iB;
ppA = &pA;
ppB = &pB;
cout<<**ppA << " " <<**ppB << endl;
SwapInt(**ppA, **ppB);
cout<<**ppA << " " <<**ppB << endl;
system("PAUSE");
return EXIT_SUCCESS;
}
결과
10 20
20 10
음........ 레퍼런스를 한번 써봤는데 재미있었다.
다만 swap함수에서 왜 별도의 Set라는 변수를 적용시켰냐하면
Set없이 바로 값을 대입 그러니까
인자 ref1 , ref2 (즉 10, 20을 넣는셈)
int& temp = ref1; -----------1
ref1 = ref2; -----------2
ref2 = temp; -----------3
하면 결과
10 20 -> 20 20 이되버린다.
고민하던중.. 그렇다. 저거 1번위치를 보면 temp 하고 ref1하고 주소값이 같아진거다.
그래서 2번위치에서 ref1에 20이 들어가고 양쪽다 20 20상태가 되겟고
3번에서 temp가 10이라는 착각을 하였던 것이다. temp는 이미 바뀐 ref1 즉 20이들어가있는 상태인것이다.
잼있다.
'프로그래밍 > 공부관련' 카테고리의 다른 글
STRICT 와 WIN32_LEAN_AND_MEAN 의 정의 (0) | 2009.08.21 |
---|---|
* code sampler (0) | 2009.08.20 |
프로그래밍 디자인패턴에 대해 알기쉽게 정리된 네이버지식인에서 발췌.. (0) | 2009.08.12 |
깜박했었던, 양면그리기.. 스카이박스적용 및 항아리내부그리기 및 집안내부그리기등등.. (0) | 2009.07.15 |
D3D에서 메시지박스가 가려졌을때 처리 (0) | 2009.07.04 |