몽상실현개발주의

[따배씨] 12.15 동적 할당 메모리를 배열처럼 사용하기 본문

Language/C

[따배씨] 12.15 동적 할당 메모리를 배열처럼 사용하기

migrationArc 2021. 6. 15. 23:22

[따배씨] 12.15 동적 할당 메모리를 배열처럼 사용하기

따배씨 - 따라하며 배우는 C언어

12강 Storage Classes, Linkage and Memory Management

12.15 동적 할당 메모리를 배열처럼 사용하기

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

int main(){
    /*
        One variable
     */
    
    int* ptr = NULL;
    
    ptr = (int*)malloc(sizeof(int)*1);
    if (!ptr) exit(1);
    
    *ptr = 1024 * 3;
    printf("%d\n", *ptr);
    
    free(ptr);
    ptr = NULL;
    
    return 0;
}
  • 변수 하나를 동적 할당으로 사용

 

 

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

int main(){
    /*
        1D array
     */
    
    int n = 3;
    int* ptr = (int*)malloc(sizeof(int) * n);
    
    if(!ptr) exit(1);
    
    ptr[0] = 123;
    *(ptr + 1) = 456;
    *(ptr + 2) = 789;
    
    free(ptr);
    ptr = NULL;
    
    return 0;
}
*(ptr + 1) = 456;
  • *(ptr+1) = ptr 주소 값 + int size = ptr[1]

 

 

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

int main(){
    /*
        2D array
     */
    
    int row = 3, col = 2;
    int(*ptr2d)[2] = (int(*)[2])malloc(sizeof(int) * row * col);
    //int(*ptr2d)[col] = (int(*)[col])malloc(sizeof(int) * row * col); // VLA
    
    if (!ptr2d) exit(1);
    
    for (int r = 0; r < row; r++)
        for (int c = 0; c < col; c++)
            ptr2d[r][c] = c + col * r;
    
    for (int r = 0; r < row; r++){
        for (int c = 0; c <col; c++)
            printf("%d ", ptr2d[r][c]);
        printf("\n");
    }
    
    return 0;
}
int(*ptr2d)[2] = (int(*)[2])malloc(sizeof(int) * row * col);
  • 동적 할당을 이용했지만, col 갯수는 지정되어 있어서 효용성이 떨어짐

 

 

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

int main(){
    /*
        Using 1D arrays as 2D arrays
     
        row = 3, col = 2
     
        (r, c)
     
        2D
        (0, 0), (0, 1)
        (1, 0), (1, 1)
        (2, 0), (2, 1)
     
        1D
        (0, 0) (0, 1) (1, 0) (1, 1) (2, 0) (2, 1)
        0      1      2      3      4      5        = c + col * r
     */
    
    int row = 3, col = 2;
    int* ptr = (int*)malloc(sizeof(int) * row * col);
    
    if (!ptr) exit(1);
    
    for (int r = 0; r < row; r++)
        for (int c = 0; c < col; c++)
            ptr[c + col * r] = c + col * r;
    
    for (int r = 0; r < row ; r++){
        for (int c = 0; c < col; c++)
            printf("%d ", *(ptr + c + col * r));
        printf("\n");
    }
    
    return 0;
}
  • 동적 할당 1차원 배열을, 2차원 배열로 사용

 

 

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

int main(){
    /*
        Using 1D arrays as 3D arrays
     
        row = 3, col = 2, depth = 2
     
        (r, c, d)
     
        3D
        -------------------
        (0, 0, 0) (0, 1, 0)
        (1, 0, 0) (1, 1, 0)
        (2, 0, 0) (2, 1, 0)
        -------------------
        (0, 0, 1) (0, 1, 1)
        (1, 0, 1) (1, 1, 1)
        (2, 0, 1) (2, 1, 1)
        -------------------
     
        1D
        (0, 0, 0) (0, 1, 0) (1, 0, 0) (1, 1, 0) (2, 0, 0) (2, 1, 0) (0, 0, 1) (0, 1, 1) (1, 0, 1) (1, 1, 1) (2, 0, 1) (2, 1, 1)
        0         1         2         3         4         5         6         7         8         9         10         11
        = c + col * r + (col * row) * d
     
        3D
        rw, col, depth, height
     */
    
    int row = 3, col = 2, depth = 2;
    int* ptr = (int*)malloc(sizeof(int) * row * col * depth);
    
    if (!ptr) exit(1);
    
    for (int d = 0; d < depth; d++)
        for (int r = 0; r < row; r++)
            for (int c = 0; c < col; c++)
                ptr[c + col * r + (row * col) * d] = c + col * r + (row * col) * d;
    
    for (int d = 0; d < depth; d++)
        for (int r = 0; r < row; r++)
            for (int c = 0; c < col; c++)
                printf("%d ", *(ptr + c + col * r + (row * col) * d));
            printf("\n");
        printf("\n");
  
    return 0;
}
  • 동적 할당 1차원 배열을, 3차원 배열로 사용

 

 


이 글의 모든 사진과 내용의 출처는 홍정모 교수님께 있음을 알려드립니다.

http://blog.naver.com/atelierjpro

 

실리콘 밸리의 프로그래머 : 네이버 블로그

안녕하세요! 홍정모 블로그에 오신 것을 환영합니다. 주로 프로그래밍 관련 메모 용도로 사용합니다. 강의 수강하시는 분들은 홍정모 연구소 카페로 오세요.

blog.naver.com

http://www.inflearn.com/course/following-c

 

홍정모의 따라하며 배우는 C언어 - 인프런 | 강의

'따배씨++'의 성원에 힘입어 새롭게 개발된 C 언어로 시작하는 프로그래밍 입문 강의입니다. '따배씨'와 함께 프로그래밍 인생을 업그레이드 해보세요., 따라하며 배우는 C언어 '따배씨++'의 성원

www.inflearn.com

 

 

Comments