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

05  int main (void)
                     06  {
                     07    int i;
                     08    int *a;   /* 배열의 첫 번째 요소의 포인터 */
                     09    int na;   /* 배열 a의 요소 개수 */
                     10    printf("요소 개수 : ");
                     11    scanf("%d", &na);
                     12    a = calloc(na, sizeof(int));   /* 요소 개수가 na인 int형 배열을 생성 */
                     13
                     14    if(a == NULL)
                     15      puts("메모리 확보에 실패했습니다.");
                     16    else {
                     17      printf("%d개의 정수를 입력하세요.\n", na);
                     18      for(i = 0; i < na; i++) {
                     19        printf("a[%d] : ", i);                           실행 결과
                     20        scanf("%d", &a[i]);                        요소 개수 : 4
                     21      }                                            4개의 정수를 입력하세요.
                     22      printf("각 요솟값은 아래와 같습니다.\n");                a[0] : 10
                                                                          a[1] : 73
                     23      for(i = 0; i < na; i++)
                                                                          a[2] : 2
                     24        printf("a[%d] = %d\n", i, a[i]);
                                                                          a[3] : -5
                     25      free(a);        /* 요소 개수가 na인 int형 배열을 해제 */  각 요솟값은 아래와 같습니다.
                     26    }                                              a[0] = 10
                     27                                                   a[1] = 73
                     28    return 0;                                      a[2] = 2
                                                                          a[3] = -5
                     29  }


                   배열의 사용이 끝나면 free 함수로 메모리를 해제합니다. 해제 방법은 단일 객체의 해제와 마

                   찬가지로 확보한 영역의 포인터를 free 함수의 매개변수로 전달합니다.
                       free 함수로 해제한 영역은 간접 연산자 *와 첨자 연산자 [ ]로 접근할 수 없습니다.


                   a는 배열에 사용하기 위해 확보한 메모리의 첫 번째 주소를 가리키는 포인터입니다. a의 의미
                   가 배열은 아니지만 앞으로 ‘배열 a를 생성한다.’ 또는 ‘배열 a를 해제한다.’라는 표현을 사용
                   하겠습니다.




                       보충수업 2-1   void 포인터

                   calloc 함수, malloc 함수, free 함수는 char형 객체, int형 객체, 나아가 배열이나 구조체 객체 등 모
                   든 자료형의 메모리 확보 또는 해제에 사용합니다. 이때 특정한 자료형의 포인터를 주고받을 때 자료



                   52   C 알고리즘
   47   48   49   50   51   52   53   54   55   56   57