17장. 포인터의 포인터
17-1 포인터의 포인터 포인터의 포인터 더블 포인터라고 불린다. 싱글 포인터의 주소 값을 저장하는 용도의 포인터 17-1 포인터의 포인터 포인터의 포인터 더블 포인터라고 불린다. 싱글 포인터의 주소 값을 저장하는 용도의 포인터 int main(void) { double val=3. 14; double *ptr1 = &val; // 싱글 포인터 double **ptr2 = &ptr1; // 더블 포인터 . . . 그림 17-1 그림 17-2
더블 포인터의 의한 Call-By-Reference 17-1 포인터의 포인터 더블 포인터의 의한 Call-By-Reference 다음 그림이 제시하는 프로그램의 구성을 통한 이해 그림 17-3
17-1 포인터의 포인터 구현 사례 1 : 효과 없는 swap 함수의 호출 그림 17-5 /* ptr_swap1.c */ 17-1 포인터의 포인터 구현 사례 1 : 효과 없는 swap 함수의 호출 /* ptr_swap1.c */ #include <stdio.h> void pswap(int *p1, int *p2); int main(void) { int A=10, B=20; int *pA, *pB; pA=&A, pB=&B; pswap(pA, pB); // 함수 호출 후 printf("pA가 가리키는 변수 : %d \n", *pA); printf("pB가 가리키는 변수 : %d \n", *pB); return 0; } void pswap(int *p1, int *p2) { int *temp; temp=p1; p1=p2; p2=temp; } 그림 17-5
17-1 포인터의 포인터 구현 사례 2 : 더블 포인터 입장에서의 swap 그림 17-6 /* ptr_swap2.c */ 17-1 포인터의 포인터 구현 사례 2 : 더블 포인터 입장에서의 swap /* ptr_swap2.c */ #include <stdio.h> void pswap(int **p1, int **p2); int main(void) { int A=10, B=20; int *pA, *pB; pA=&A, pB=&B; pswap(&pA, &pB); //함수 호출 후 printf("pA가 가리키는 변수 : %d \n", *pA); printf("pB가 가리키는 변수 : %d \n", *pB); return 0; } void pswap(int **p1, int **p2) { int *temp; temp=*p1; *p1=*p2; *p2=temp; } 그림 17-6
17-1 포인터의 포인터 포인터 배열과 포인터 타입 1차원 배열의 경우 배열이름이 가리키는 대상을 통해서 타입이 결정된다. 17-1 포인터의 포인터 포인터 배열과 포인터 타입 1차원 배열의 경우 배열이름이 가리키는 대상을 통해서 타입이 결정된다. 포인터 배열이라고 하더라도 마찬가지! int* arr1[10]; double* arr2[20]; char* arr3[30];
17-2 포인터의 필요성 지금까지… 앞으로… swap 함수와 같이 함수 내에서 데이터의 조작을 하기 위해서… 메모리 동적 할당 17-2 포인터의 필요성 지금까지… swap 함수와 같이 함수 내에서 데이터의 조작을 하기 위해서… 앞으로… 메모리 동적 할당 자료구조의 구현