Page 55 - Do it! 자료구조와 함께 배우는 알고리즘(C 언어, 3쇄)
P. 55

지금까지의 내용을 정리하면 아래와 같습니다.


                         아래 4개의 식은 모두 배열의 각 요소에 접근하는 식입니다.
                         a[i]        *(a + i)      p[i]      *(p + i)    첫 번째부터 i개 뒤쪽의 요소


                         아래 4개의 식은 배열의 각 요소를 가리키는 포인터입니다.
                         &a[i]       a + i        &p[i]     p + i      첫 번째부터 i개 뒤쪽의 요소를 가리키는 포인터



                        또 첫 번째 요소를 가리키는 포인터 a + 0과 p + 0은 간단히 a와 p로 나타낼 수 있습니다. 또 그 별칭
                        (alias, 에일리어스)인 *(a + 0)와 *(p + 0)은 각각 *a, *p로 나타낼 수 있습니다. 이처럼 포인터가 배열
                        의 첫 번째 요소를 가리키는 경우 그 포인터는 마치 배열처럼 동작할 수 있습니다.


                        공백 포인터와 NULL
                        공백 포인터(null pointer)는 객체 포인터, 함수 포인터와는 다른 특별한 포인터입니다. 정수 값 0은 모
                        든 포인터형으로 형 변환이 가능하고 그 결과는 NULL 포인터입니다. 공백 포인터를 나타내는 것이 공
                        백 포인터 상수(null pointer constant)라고 하는 매크로 NULL입니다. NULL의 정의는 ‘값 0을 갖는
                        모든 정수, 상수 또는 상수식을 void *로 형 변환한 식’입니다.
                           함수 포인터란 변수를 가리키는 포인터가 있는 것처럼 ‘함수를 가리키는 포인터’입니다.


                        매크로 NULL은 <stddef.h> 헤더에 정의되어 있습니다. 또 <locale.h>, <stdio.h>, <stdlib.h>,
                        <time.h> 가운데 어느 헤더를 포함해도 선언한 것과 마찬가지로 동작합니다. 아래는 NULL을 정의한
                        예입니다.


                         #define NULL 0         /* NULL 정의의 한 예(C/C++) */
                         #define NULL(void *)0   /* NULL 정의의 한 예(C++에서는 사용할 수 없음) */





                         int a[5];                        포인터 p는 마치 배열 a처럼 동작합니다.
                         int *p = a;
                                                  p         A         B          C
                          &a[0]  a + 0  &p[0]  p + 0
                                                  a[0]     *(a  + 0)   p[0]      *(p + 0)
                          &a[1]  a + 1  &p[1]  p + 1
                                                  a[1]     *(a  + 1)   p[1]      *(p + 1)
                          &a[2]  a + 2  &p[2]  p + 2
                                                  a[2]     *(a  + 2)   p[2]      *(p + 2)
                          &a[3]  a + 3  &p[3]  p + 3
                                                  a[3]     *(a  + 3)   p[3]      *(p + 3)
                          &a[4]  a + 4  &p[4]  p + 4
                                                  a[4]     *(a  + 4)   p[4]      *(p + 4)
                          &a[5]  a + 5  &p[5]  p + 5
                          각 요소의 포인터를 나타내는 식               각 요소에 접근하는 식
                                                [그림 2C-1] 포인터와 배열


                                                                                      02• 기본 자료구조  55
   50   51   52   53   54   55   56   57   58   59   60