이중 포인터는 함수가 포인터를 변경할 수 있게 한다.
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 |