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
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: }
<실행결과>
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: }
<실행결과>
참조(Reference) |
참조사이트: http://blog.daum.net/merrycherry/2330828
'내장형하드웨어 > 일일보고서' 카테고리의 다른 글
2011년6월24일_2차원 동적배열을 달팽이 배열에 적용하여 사용자가 입력한 크기의 배열출력 (0) | 2011.06.24 |
---|---|
2011년6월23일_구조체(struct), 구조체배열, 구조체포인터 (0) | 2011.06.24 |
2011년6월22일_NASM으로 어셈블한 프로시저를 C Code에서 호출 (1) | 2011.06.23 |
2011년6월21일_AT91SAM7S256 spec (미완성) (0) | 2011.06.22 |
2011년6월21일_8개의 LED를 키트자동차처럼 좌우로 시프트(AT91SAM7S256 Board) (0) | 2011.06.22 |