http://gall.dcinside.com/board/view/?id=programming&no=434382&page=4
void swap(int **dp1,int **dp2)
{
int *temp = *dp1;
*dp1 = *dp2;
*dp2 = temp;
}
int main(void)
{
int num1=10, num2=20;
int *ptr1,*ptr2;
ptr1=&num1, ptr2=&num2;
swap(&ptr1,&ptr2);
printf("%d %d",*ptr1,*ptr2);
return 0;
}
이렇게 나오는데, 물론 결과값 찍어보면 당연히 20 10이 나오겠지만
결론적으로 보자면 얘네가 가리키는 정말 리얼 값을 바꾸는게 아니고 그냥 주소만 바꿔버린거잖아
그럼 다른 포인터 하나가 기존의 num1의 어드레스를 가리키고 있는게 있었다면, 이 스왑함수를 실행시켜도 결국 10이 나오는거 아님?
도대체 이런 말도안되는 예제는 왜 갖다 쓰는걸까? 이중포인터를 쓰는 예제라해도 진짜 이건 어거지라고 생각함
그냥 이중포인터 문법을 보여주는 예제에 불과하다고 보면 된다.
num1 값을 출력해보면 전혀 스왑되어있지 않다는 말이구나?
예를들어 '배열스왑'이라면 어쩔래? 배열크기가 엄청나게 크면 일일이 진짜 값을 바꿀래, 그냥 가리키는 주소만 바꿀래? 기초만 보니까 쓸모 없어보이지, 큰거 다루게 되면 당연히 필요한 기법이다. 기초만 따지면 애초에 포인터도 전혀 필요가 없지. 초보들이 포인터를 쉽게 이해못하는 이유중의 하나가 바로 그거야. 기초만 보니까 '귀찮게 뭐하러 이런걸 하냐?'라는 생각을 하는거지. 쓸데없어 보이니까 효용을 모르는거고, 효용을 모르니까 이해를 못하는거지.
저거 만들어준 사람도 참 어처구니 없겠다. 포인터 기법 쓸만한거 하나 가르쳐주고 쓸데없는거라 욕이나 먹고 있는거 알면 기분 참 좋겠다. 그지? ㅋㅋㅋ
뭘 이런걸 네다섯줄씩 설명하고 앉아있냐. 못알아먹는 놈이 ㅄ이지
시간아깝다