2011년6월23일_C과제11(동적배열(메모리동적할당), 2차원 동적배열)

 

 

1차원 동적배열


malloc함수의 첫 인자로 Byte단위의 크기를 넘겨주고 heap영역에 할당받은 배열의 시작주소를 받는다.

   1:  int *p;
   2:  int iSize;
   3:  int i;
   4:   
   5:  scanf("%d", &iSize);
   6:   
   7:  p = (int *)malloc(sizeof(int) * iSize);        // int형 크기 4Bytes * iSize만큼확보
   8:   
   9:  //동적배열에 값을 넣기
  10:  for(i = 0 ; iSize > i ; ++i)
  11:  {
  12:      p[i] = i;       // i는 0~iSize-1까지 증가.
  13:  }
  14:   
  15:  //동적배열에 있는 값을 출력하기.
  16:  for(i = 0 ; iSize > i ; ++i)
  17:  {
  18:      printf("p[%d] = %d",i ,p[i]);       // i는 0~iSize-1까지 증가.
  19:  }
  20:   
  21:  //메모리반납
  22:  free(p);

 

 

2차원 동적배열

 

하기의 노트필기를 찍은 사진 중 3번째 방법인 하나의 연속된 메모리로 할당받으나 열의 크기가 정해진 방법을 사용함.

   1:  // 10 by 10 Matrix(Array)
   2:  #define ROW 10
   3:  #define COL 10
   4:   
   5:  int (*x)[COL];
   6:   
   7:  //전에 했던 2차원배열의 원형과 같음. 행의 크기를 구한 뒤에 행의 갯수를 곱함. 
   8:  x = (int (*)[COL])malloc(sizeof(int (*)[COL] * ROW);

 

참조사이트: http://blog.daum.net/merrycherry/2330828

 

DSCN3483 DSCN3484 DSCN3485

 

 

 

 

1. 사용자가 입력한 크기만큼인 int 자료형 동적 배열을 생성해서 0부터 순서대로 채우세요. 사용자가 입력한 숫자가 100이라면, 0부터 99까지의 값을 배열에 저장합니다.

출력) 동적 배열크기 입력 : 10
       [0] = 0
       [1] = 1
       [2] = 2
       [3] = 3
       [4] = 4
       [5] = 5
       [6] = 6
       [7] = 7
       [8] = 8
       [9] = 9
       동적 배열크기 입력 : 0
       프로그램 종료!


<소스코드>

   1:  #include <stdio.h>
   2:  #include <stdlib.h>
   3:   
   4:  int main()
   5:  {
   6:      int iSize;            //배열의 크기
   7:      int iLoop;        //제어변수
   8:      int *pHeap;        //Heap영역을 가리키는 포인터변수 (배열의 시작)
   9:      
  10:      printf("동적 배열크기 입력: ");
  11:      scanf("%d", &iSize);
  12:      
  13:      if(0 >= iSize)        //0이하의 값이 들어오면 프로그램 종료
  14:      {
  15:          printf("프로그램 종료!\n");
  16:          return 0;        //정상종료
  17:      }
  18:          
  19:      //int형을 가리키는 포인터로 캐스팅...int형의 크기 * 배열갯수만큼 메모리 확보
  20:      pHeap = (int *)malloc(sizeof(int) * iSize);
  21:      
  22:      if('\0' == pHeap)    //NULL값을 반환시엔
  23:      {
  24:          printf("heap영역에 배열의 동적할당이 실패하였습니다.\n");
  25:          return -1;        //영역확보실패!!
  26:      }
  27:      
  28:      //동적배열 시작부터 끝까지 순차적으로 1씩 증가하는 값을 집어 넣고 출력.
  29:      for(iLoop = 0 ; iSize > iLoop ; ++iLoop)
  30:      {
  31:          pHeap[iLoop] = iLoop;
  32:          printf("[%d] = %d\n", iLoop, pHeap[iLoop]);
  33:      }
  34:      
  35:      free(pHeap);        //사용했던 메모리를 OS에 돌려줌.
  36:      
  37:      return 0;
  38:  }

 

<실행결과>

clip_image002[4]

 

 

 

 

2. 크기가 5 x 7 인 int 동적 배열을 생성한 다음, 0부터 순서대로 값을 저장하세요.

<소스코드>

   1:  #include <stdio.h>
   2:  #include <stdlib.h>
   3:   
   4:  #define ROW    5            //행의 크기
   5:  #define COL    7            //열의 크기
   6:   
   7:  int main()
   8:  {
   9:      int iRow;                    //행 제어변수
  10:      int iCol;                    //열 제어변수
  11:      int (*pMatrix)[COL];        //2차원배열 포인터
  12:      
  13:      //2차원배열 포인터형으로 캐스팅...행의 크기 * 행의 갯수만큼 확보
  14:      pMatrix = (int (*)[COL])malloc(sizeof(int(*)[COL]) * ROW);
  15:      
  16:      if('\0' == pMatrix)            //NULL반환시
  17:      {
  18:          printf("heap영역에 배열의 동적할당이 실패하였습니다.\n");
  19:          return -1;                //영역확보실패!!
  20:      }
  21:      
  22:      //2차원배열에 값을 순서대로 대입하고 보기좋게 출력.
  23:      for(iRow = 0 ; ROW > iRow ; ++iRow)
  24:      {
  25:          for(iCol = 0 ; COL > iCol ; ++iCol)
  26:          {
  27:              pMatrix[iRow][iCol] = iRow * COL + iCol;
  28:              printf("%3d", pMatrix[iRow][iCol]);
  29:          }
  30:          
  31:          putchar('\n');
  32:      }
  33:      
  34:      free(pMatrix);        //사용했던 메모리를 OS에 돌려줌.
  35:      
  36:      return 0;
  37:  }

 

<실행결과>

clip_image002

 

 

 

참조(Reference)

 

참조사이트: http://blog.daum.net/merrycherry/2330828

 

DSCN3483DSCN3484  DSCN3485