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

실습 8-4                                                   •완성 파일 chap08/strptr.c
                         01  /* 문자열을 출력(포인터를 사용)합니다. */
                                                                                 실행 결과
                         02  #include <stdio.h>
                                                                        포인터 pt는 "12345"를(을) 가리킵니다.
                         03
                         04  int main (void)
                         05  {
                         06    char *pt = "12345";
                         07    printf("포인터 pt는 \"%s\"를(을) 가리킵니다.\n", pt);
                         08
                         09    return 0;
                         10  }



                        선언한 포인터 pt는 초기화 요소로 문자열 리터럴 "12345"를 줍니다. 문자열 리터럴을 평가
                        하여 얻는 값은 그 문자열 리터럴의 첫 번째 문자에 대한 포인터이므로 pt는 "12345"가 들어
                        있는 메모리 영역의 첫 번째 문자 '1'을 가리키며 초기화됩니다.


                                                포인터 pt는 문자열 리터럴 "12345"의 첫 번째 문자 '1'을 가리킵니다.
                         char *pt = "12345";
                                               pt           1  2  3  4  5  Ø
                                                [그림 8-3] 포인터와 문자열


                        02장에서 포인터 p가 가리키는 배열의 요소로부터 i만큼 뒤에 있는 요소는 첨자 연산자([])를

                        사용한 식 p[i]와 같은 방법으로 접근할 수 있다고 했습니다. 그러므로 문자열 리터럴
                        "12345"의 문자 '1', '2', '3', '4', '5'는 순서대로 pt[0], pt[1], pt[2], pt[3], pt[4]와 같이 pt를
                        배열처럼 사용할 수 있습니다. 배열에 의한 문자열과 포인터에 의한 문자열이 갖는 메모리 영
                        역의 크기를 비교하면 다음과 같습니다.



                         char st[] = "12345";      /* 배열에 의한 문자열의 크기는 6바이트 */
                         char *pt = "12345";       /* 포인터에 의한 문자열의 크기는 sizeof(char *) + 6바이트 */



                        배열에 저장한 문자열은 6바이트의 메모리 영역을 갖습니다. 하지만 포인터로 표현한 문자열
                        은 문자열 리터럴을 저장하기 위한 영역 외에도 pt가 갖는 메모리 영역이 더 필요합니다. 즉,

                        pt를 위한 영역인 sizeof(char *) 바이트와 또 문자열 리터럴을 위한 영역인 sizeof("12345")
                        바이트만큼 메모리 영역이 필요합니다. 다시 말해 포인터로 표현한 문자열은 배열에 저장한
                        문자열보다 더 많은 메모리 영역을 차지합니다.






                                                                                      08•문자열 검색  309
   304   305   306   307   308   309   310   311   312   313   314