Taking baby-developer steps

14. 동적 메모리 할당 - 2차원 배열 본문

문제풀이연습/C언어 예제풀이 연습

14. 동적 메모리 할당 - 2차원 배열

Surin Lee 2021. 3. 28. 18:45

동적 메모리 할당을 이용해 2차원 배열을 만들면, 정확히 필요한 만큼만 그때 그때 효율적으로 만들어서 사용가능하다. 

#include <stdio.h>
#include <stdlib.h>

int main(void){
    int** p = (int**)malloc(sizeof(int)*3);
    for (int i=0; i<3; i++){
        *(p+i) = (int*)malloc(sizeof(int)*3);
    }
    for(int i = 0; i<3; i++){
        for(int j=0; j<3; j++){
            *(*(p+i)+j) = i*3 + j;
        }
    }
    for(int i=0; i<3; i++){
        for(int j=0; j<3; j++){
            printf("%d",*(*(p+i)+j));
        }
        printf("\n");
    }
    system('pause');
    return 0;
}

프로그램이 종료되는 순간, 메모리 해제가 자동적으로 되므로, 이런 간단한 예제에선 굳이 free()함수를 하지않아도 상관 없다. 

먼저, 이중포인터를 이용해, 3개의 행만큼 들어갈 수 있도록 메모리를 할당했다. 이때 sizeof(int)이 자체가, 1차원 배열의 시작점을 가리키는 포인터 이다. 그 후, for문을 이용해 각각의 행에 들어갈 3개의 열을 만들었다.(메모리를 할당했다)

그 후 이중 for문을 이용해, 특정 행(i)의 몇번째 열(j)에 값을 넣어주고, 다시한번 2중 for 문으로 각각의 원소를 차례대로 출력하였다. 그 결과는 다음과 같다.

012
345
678

 

 

Comments