반응형
c에서는 주로 call-by-reference로 data swap을 한다.
하지만, 2가지 방법을 생각할 수 있다.
첫 번째는 value의 직접교환을 통한 data swap이고
두 번째는 value's address의 교환을 통한 data swap이다.
이것을 왜 알아보는가? doublepointer를 사용하면 call-by-function을 이해하기 쉽기 때문이다.
#include<stdio.h>
void DoublePointer(int **a, int **b)
{
int *c;
c = *a;
*a = *b;
*b = c;
}
void AddressSwap(int *a, int *b)
{
int c;
c = *a;
*a = *b;
*b = c;
}
void main()
{
int a = 3, b = 5;
int *pa = &a, *pb = &b;
printf("AddressSwap--------\n");
printf("prev %d %d %x %x \n", a, b, &a, &b);
AddressSwap(&a, &b);
printf("aftr %d %d %x %x \n", a, b, &a, &b);
printf("DoublePointer--------\n");
printf("prev %d %d %x %x \n", *pa, *pb, pa, pb);
DoublePointer(&pa, &pb);
printf("aftr %d %d %x %x \n", *pa, *pb, pa, pb);
}
반응형
'언어 > C' 카테고리의 다른 글
move semantics (0) | 2015.11.25 |
---|---|
swap 매크로 (0) | 2015.06.28 |
MFC Image Viewer (0) | 2015.02.09 |
file 복사 프로그램 (0) | 2015.01.30 |
c File IO (0) | 2015.01.30 |