본문 바로가기

C++

[C++] 이중 포인터

이중 포인터는 함수가 포인터를 변경할 수 있게 한다.

void InputName(char **pName)
{
     *pName=(char *)malloc(12);
     strcpy(*pName,"Cabin");
}

void main()
{
     char *Name;
     InputName(&Name);
     printf("이름은 %s입니다\n",Name);
     free(Name);
}

main에서 InputName함수에 Name 포인터변수의 번지, 이중포인터를 전달한다.

InputName함수는 매개변수로 &Name을 받기 때문에 InputName함수 내부에서 *pName은 Name이 된다.

그래서 결과적으로 포인터변수 Name에 메모리를 할당하고 문자열을 복사하게 된다.

 

void InputName(char *pName)
{
     pName=(char *)malloc(12);
     strcpy(pName,"Cabin");
} 

void main()
{
     char *Name;
     InputName(Name);
     printf("이름은 %s입니다\n",Name);
     free(Name);
}

위 코드는 잘못된 코드인데, InputName함수 내부 pName이 main의 Name포인터를 가리키는 것이 아니라

InputName함수 내부의 지역 변수 취급 받기 때문이다. 그래서 포인터를 참조하려면 이중 포인터를 넘긴 후에

*이중포인터 를 통해서 포인터에 접근해야 한다.

'C++' 카테고리의 다른 글

[C++] 포인터 vs 배열  (0) 2022.01.02
[C++] 다차원배열  (0) 2022.01.02
[C++] malloc,calloc,realloc  (0) 2022.01.01
[C++] 정수형 포인터와 void형 포인터  (0) 2022.01.01
[C++] 비트 연산자, 쉬프트 연산자  (0) 2022.01.01