어제의 의문은 여기를 보자.
COS Pro 2급 C 언어: 48.3 이중 포인터 매개변수 사용하기
우리의 의문은 ‘이중포인터 매개변수’라는 주제로 다뤄지고 있다.
완전히 이해한건 아니지만 우선 오늘은 진도를 더 나가보자…
라고 하기엔 자꾸 맘에 걸리니, 어제 홍정모님이 swap에 1차원 포인터를 쓰려면 어떻게 하라고 했는지 살펴보자.
char* temp = arr[min_idx];
arr[min_idx] = arr[i];
arr[i] = temp;*/
이걸 sel_sort함수 안에 넣어줬다. swap 기능을 함수화하지 않았음.
이를 미뤄보아
는 점을 유추할 수 있다.
void swap(char** xp, char** yp)
{
char *temp = *xp;
*xp = *yp;
*yp = temp;
}
swap(&arr[i], &arr[min_idx]);
어제의 swap함수 내에서 파라미터를 이중포인터가 아니라 그냥 포인터로 설정하면 무슨 일이 일어날까.
이 경우 다음과 같은 상상임.
void swap(char* xp, char* yp)
{
char *temp = *xp;
*xp = *yp;
*yp = *temp;
}
swap(arr[i], arr[min_idx]);
우선 함수가 함수 영역 밖에 나가서도 메모리에 영향을 미치려면 주소를 이용해야한다는 점은 알았음. 따로 반환값이 없을 경우에 메모리에 영향을 미치려면 포인터를 매개변수로 받아야함.
그리고 위와 같은 경우엔? arr[i]
와 arr[min_idx]
는 주소임. 그리고 swap함수에 아규먼트로 전달되면서 그 주소가 복사되어char*xp
와 *yp
에 전달됨.
이때 중요한건, 그 주소 자체가 복사되어 이동하기 때문에 swap함수 내에서 *xp
와 *yp
는 주소끼리 교환하긴 하지만, 영역을 나가면서 주소를 교환한 *xp
와*yp
는 삭제되고, 결국 아무일도 일어나지 않음.