본문 바로가기
프로그래밍언어/C 언어

[혼자 공부하는 C언어] 이중 포인터 활용 1 : 포인터 값을 바꾸는 함수의 매개변수

by khsnote22 2022. 12. 13.

http://www.yes24.com/Product/Goods/74269921?pid=123487&cosemkid=go15604913615239458&gclid=CjwKCAiAv9ucBhBXEiwA6N8nYAhvMUtGL3MQmVv9zcKrRhC6SdIL-LPFRvdBE6w3RVq4oJzoyhzvTRoCuuUQAvD_BwE 

 

혼자 공부하는 C 언어 - YES24

혼자 해도 충분하다! 1:1 과외하듯 배우는 C 프로그래밍 자습서이 책은 독학으로 C 언어를 배우는 입문자가 ‘꼭 필요한 내용을 제대로’ 학습할 수 있도록 구성했다. ‘무엇을’ ‘어떻게’ 학

www.yes24.com


#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;
}

이 예제는 문자열을 바꿔 출력 출력하지만 문자열 자체를 바꾸지 않습니다. 문자열을 연결하는 포인터의 값을 바꾸면 연결 상태가 바뀌므로 이후에 포인터를 사용하면 마치 문자열을 바꾼 것처엄 사용할 수 있습니다. 

이 예제는 포인터의 값을 수시로 바꾸기 위해 그 기능을 함수로 만듭니다. 두 변수의 값을 바꾸는 함수는 변수의 주소를 인수로 주고 함수가 그 주소를 간접 참조하여 변수의 값을 바꿔야 합니다. 그런데 11행에서 바꾸고자 하는 변수 pa, pb는 포인터이므로 함수의 인수로 포인터의 주소를 줘야하고 결국 그 값을 받는 매개변수로 이중 포인터가 필요합니다.