Page 53 - Do it! 자료구조와 함께 배우는 알고리즘(C 언어, 3쇄)
P. 53
형이 서로 맞지 않으면 문제가 발생하므로 void 포인터를 반환하거나 받는 데 사용합니다. void 포인
터는 모든 형의 객체를 가리킬 수 있습니다. void 포인터의 값을 모든 자료형의 포인터에 대입할 수 있
고, 거꾸로 모든 자료형의 포인터 값을 void 포인터에 대입할 수 있습니다.
보충수업 2-2 포인터와 배열
포인터란?
포인터(pointer)는 ‘객체(변수) 또는 함수를 가리키는 것’으로 정의할 수 있습니다. 아래는 포인터 선언
의 예입니다.
int *p; /*p는 int형 객체를 가리키는 포인터 */
double *q; /*q는 double형 객체를 가리키는 포인터 */
위에서 볼 수 있듯이 포인터의 자료형은 포인터가 가리키는 곳의 객체의 자료형을 따라 갑니다. int형
객체를 가리키는 포인터는 int *형이고 double형 객체를 가리키는 포인터는 double *형입니다. n이
int형 객체라고 할 때, 포인터 p가 객체 n을 가리키기 위해서는 아래처럼 n의 주소를 p에 대입해야 합
니다.
p = &n; /* n의 주소를 p에 대입합니다(p가 n을 가리키도록 합니다). */
위에서 n에 사용한 단항 연산자 &는 주소 연산자라고 하며 피연산자(n)의 주소를 가져옵니다. 포인터
p가 가리키는 객체의 값은 간접 연산자라고 하는 단항 연산자 *를 사용하여 접근할 수 있습니다. p가 n
을 가리킨다면 p가 가리키는 곳에 있는 n의 값을 접근하는 식은 *p입니다. 그러므로 다음을 실행하면
n에 999가 대입됩니다.
*p = 999; /* p가 가리키는 곳에 999를 대입합니다. */
다시 말해 ‘*p는 n과 같다.’라고 말할 수 있습니다. 만약 p가 다른 객체 x를 가리킨다면 ‘*p는 x와 같
다.’라고 말할 수 있습니다.
포인터와 배열
포인터와 배열에 대해 그림 2C-1을 보며 좀 더 자세히 살펴보겠습니다. 배열 a와 포인터 p가 선언될
때 p의 초기화는 배열 이름인 a로 할 수 있습니다. 그런데 배열 이름은 그 배열의 첫 번째 요소에 대한
02• 기본 자료구조 53