C언어

다중 포인터 (3중 포인터)

DkDragon 2018. 6. 6. 15:33

포인터 를 다루다 문자열 관련하여서 사용할 일이 빈번하다 보니 자연스레 2중포인터 를 다루게되더라



그러다 최근에 3중포인터를 활용하여 가변적인 문자열 배열을 사용하는 방법을 알게 되었습니다.



정적 변수의 할당은 좀더 사용하기는 편합니다. 그런데 사용함에 있어서 크기가 부족하게 되면 사용하다 코딩을 수정하고


재 컴파일 하여 프로그램을 새롭게 만들어야 되니 무척이나 불편함을 느끼게된다. 


즉 가변적인 데이터는 포인터 변수로 관리해야 함을 느끼면서 알아보다 아래 사용법을 알게 됬습니다.


 


우선  메인함수 입니다.



int main()

{

  int i,len;

  char **list = NULL;

  char msg[1024];

  memset(msg,0,sizeof(msg));

  point_malloc(&list);

  for (i = 0; i < 10; i++) {

      printf("%s\n",list[i]);

  }


  return 0;

}



char **list = NULL; 아라 선언된 곳이 보입니다. 이 list 변수가 문자열 리스트를 가변적으로 저장하려교 선언한 포인터 입니다.


필요에 따라 문자열을 추가할수 있게 할 수 있는 부분입니다.



char *ko_str[] = {

    "I LOVE TEA",

    "KOREA",

    "ENGINE",

    "papa",

    "lock",

    "UnLock",

    "Hack",

    "Ping",

    "NetWork",

    "Note",

    "En"

};


문자열 리스트에 저장할 문자열 입니다. 



void point_malloc(char ***p_path)

{

  int i ,len;

  char **p_tmp = NULL;


  p_tmp = (char**)malloc(sizeof(char)*10);


  for (i = 0; i < 10; i++) {

      p_tmp[i] = (char*)malloc(sizeof(char)*1024);

      len = strlen(ko_str[i]);

      memcpy(p_tmp[i],ko_str[i], len);

  }

  *p_path = p_tmp;


}


이제 실제로 전달발은 2중포인터 변수의 주소값으로 문자열 배열을 넣는 부분입니다.

void point_malloc(char ***p_path) 2중포인터의 주소를 전달 받았기에 3중 포인터 로 인자값이 선언되어 있습니다. 



p_tmp = (char**)malloc(sizeof(char)*10); 부분은 10개의 문자열을 저장할 변수를 할당


p_tmp[i] = (char*)malloc(sizeof(char)*1024); 1개의 문자열 길이를 1024만큼 할당 


즉 10개의 문자열 변수는 각각 1024 만큼의 길이만큼 저장가능하게 만들었습니다.



즉 추후에  realloc 함수를 이용하여 추가적으로 문자열을 늘려서 사용할수 있으니 참신한 코딩 기법으로 글을 올려봅니다.