본문 바로가기
개념/혼자 공부하는 C언어

chapter 15) 이중 포인터를 사용한 포인터 교환

by kiseno 2024. 9. 12.
728x90
반응형
SMALL
#include <stdio.h>

void swap_ptr(char **ppa, char **ppb);

int main(void){
    char *pa = "success";
    char *pb = "failure";

    printf("pa -> %s, pb -> %s\n", pa, pb);
    swap_ptr(&pa, &pb);
    printf("pa -> %s, pb - > %s\n", pa, pb);

    return 0;
}

void swap_ptr(char **ppa, char **ppb){
    char *pt;
    pt = *ppa;
    *ppa = *ppb;
    *ppb = pt;
}

### `main` 함수

- `char *pa = "success";`와 `char *pb = "failure";`를 통해, 두 개의 문자열 포인터 `pa`와 `pb`가 각각 "success"와 "failure" 문자열 리터럴을 가리키도록 초기화됩니다.
- 초기 상태에서 `pa`와 `pb`가 가리키는 값들이 출력됩니다.
- `swap_ptr(&pa, &pb);` 호출을 통해, `pa`와 `pb` 포인터가 가리키는 주소가 서로 교환됩니다.
- 교환 후의 상태에서 `pa`와 `pb`가 가리키는 값들이 다시 출력되어, 두 포인터가 가리키는 문자열이 성공적으로 교환된 것을 확인할 수 있습니다.

### `swap_ptr` 함수

- 이 함수는 `char **ppa`와 `char **ppb` 두 개의 이중 포인터를 매개변수로 받습니다. 이중 포인터는 포인터의 주소, 즉 포인터를 가리키는 포인터입니다.
- 임시 포인터 `pt`를 선언하여 `*ppa`의 값을 임시로 저장합니다. 여기서 `*ppa`는 `pa`가 가리키는 주소입니다.
- `*ppa`에 `*ppb`의 값을 할당하여 `pa`가 `pb`가 가리키던 주소를 가리키게 합니다.
- 마지막으로 `*ppb`에 임시 포인터 `pt`가 가리키는 주소를 할당하여 `pb`가 처음에 `pa`가 가리키던 주소를 가리키게 합니다.

### 결과

이 코드의 실행 결과, 처음에 "success"를 가리키던 `pa`는 "failure"를 가리키게 되고, 처음에 "failure"를 가리키던 `pb`는 "success"를 가리키게 됩니다. 이 예제는 포인터의 포인터를 사용하여 두 포인터 변수의 값을 서로 교환하는 방법을 보여줍니다.

728x90
반응형
LIST