C 이중포인터 교환하기 Pointer to Pointer Swapping

자주 쓰이는 기술이라고 접하게되어 배우게 되었는데 사실은 간단하지만 모르면 엄청 시간을 할애해야할지도 모르는 방법입니다.

포인터를 가리키는 이중포인터 (**)를 받아서 A,B의 주소를 바꾸는 방법입니다.

기본원리는 일반 포인터를 받아서 바꾸는 방법과 같습니다. 단지 “무엇을” 받아서 다시 되돌려주는것이 중요하겠습니다.

다음코드는 포인터 a로 부터 값을 받아 임시 tmp에 저장한후 b를 a값으로 바꾸어줍니다.

void swap(int *a, int *b)
{
    int tmp = *a;
    *a = *b;
    *b = tmp;
}

다음코드는 이중포인터 a,b로 부터 “주소값”을 받아 포인터 tmp에 보관한후 b로 바꾸어주는 방법입니다.

void swap(int **a, int **b)
{
    int* tmp = *a;
    *a = *b;
    *b = tmp;
}

1. 임시 포인터 *tmp 에는 **a 가 가리키고 있던 *a의 주소를 임의로 저장한후
2. **a가 가리키는 *a 값은 **b 가 가리키는 *b 값으로 바꿔준후
3. **b가 가리키는 *b 값은 **a 가 가리키던 *a 값으로 바꾸어줘야하기 때문에 tmp 값을 넣어줍니다.

결론적으로 방법은 더 복잡할거같지만
이중포인터를 이용해도 넘기는 방법은 같고 임시 저장하는 값만 다르다는걸 볼수있습니다.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s