티스토리 뷰
반응형
더블 포인터의 이해
더블 포인터도 싱글 포인터와 마찬가지로 메모리 공간의 주소를 저장하는 변수입니다.
다만, 차이가 나는 것은 포인터가 가르키는 대상입니다.
결론부터 말하면 더블 포인터는 싱글 포인터의 주소 값을 저장하기 위한 포인터라는 것입니다.
위의 코드 3번 라인에서 int형 변수 num을 선언하고 10이라는 값을 할당합니다. 그리고 싱글 포인터인 pointer_num을 선언하고 num 변수의 주소 값을 할당하게 됩니다. 그리고 5번 라인에서 더블 포인터를 선언하고 싱글 포인터인 pointer_num의 주소 값을 할당하고 있습니다.
■ 더블 포인터에 의한 Call-By-Reference
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 |
void swap(int **num1,int **num2);
int main()
{
int num1 = 10;
int num2 = 20;
int *point_num1 = &num1;
int *point_num2 = &num2;
swap(&point_num1, &point_num2); //싱글 포인터의 주소 값을 넘겨줌
}
void swap(int **num1, int **num2) //싱글 포인터의 주소 값을 더블 포인터 매개변수로 얻어옴
{
int *tmp; //임시로 사용할 싱글 포인터
tmp = *num1;
*num1 = *num2;
*num2 = tmp;
} |
먼저 swap 함수가 호출 되고 17라인전까지의 포인터 관계 입니다.
다음으로 17라인이 실행 된 후 포인터 관계입니다.
임시 공간인 싱글 포인터 tmp가 point_num1이 가리키고 있는 주소 값을 가르키도록 합니다.
다음으로 18번째 라인이 수행 된 후 포인터 관계입니다.
point_num1이 가르키는 곳을 point_num2가 가르키는 곳으로 변경합니다.
최종적으로 point_num2가 가르키는 곳을 임시로 저장해둔 포인터가 가르키는 곳을 대입합니다. 즉 point_num1이 가르키는 곳을 최종적으로 가르키기 됩니다.
반응형
'Programming > C언어' 카테고리의 다른 글
[C/C++] 구조체와 사용자 정의 자료형 01 (0) | 2017.10.09 |
---|---|
[C/C++] 함수 포인터에 대한 이해 (0) | 2017.10.07 |
[C/C++] 포인터와 함수에 대한 이해 (1) | 2017.10.06 |
[C/C++] 문자열 상수 포인터 (0) | 2017.10.06 |
[C/C++] 포인터와 배열 (0) | 2017.10.03 |