구조체 2차원 배열 동적할당 - gujoche 2chawon baeyeol dongjeoghaldang

2차원 배열에 메모리를 할당하기 위해서는 이중포인터를 활용해야합니다.

1차원 배열의 메모리 할당과는 다르게 두가지 스텝으로 분류해서 이 과정을 이해할수 있습니다.

구조체 2차원 배열 동적할당 - gujoche 2chawon baeyeol dongjeoghaldang

먼저 2차원 배열의 행과 열을 row (행), column(열)로 두었을때 선행되는 작업은 row 행만큼 정수형 포인터의 메모리를 할당하는 것입니다. 

d_Array= malloc(sizeof(int *) * row) // 1차원 배열을 row개 만큼 메모리 할당한다고 이해할수 있습니다.

구조체 2차원 배열 동적할당 - gujoche 2chawon baeyeol dongjeoghaldang

그리고 할당된 row개의 메모리 공간에 가로길이 col 만큼(열에 해당) 메모리를 할당해줍니다.

이 각각은 1차원 배열이므로 기존에 알고있던 배열의 메모리할당을 떠올리면 쉽습니다.

for(int i=0;i<N;i++){

d_Array[i]=malloc(sizeof(int) * col)

}

위와 같은 방법으로 2차원배열에 메모리를 할당할수있습니다.

구조체 2차원 배열 동적할당 - gujoche 2chawon baeyeol dongjeoghaldang

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <stdlib.h>    // malloc, free 함수가 선언된 헤더 파일

/* 문제4번 2차원배열에 동적할당하기 */

int main()

{

int row, col; //row ->행 , column -> 열

scanf("%d %d"&col, &row);

char ** d_Array;

char n = 'a'-1;

//이중 포인터에 int 포인터 크기*row 만큼 동적 메모리할당

d_Array = malloc(sizeof(char** row);

for (int i = 0; i < row; i++) {

d_Array[i] = malloc(sizeof(char* col);

}

for (int i = 0; i < row; i++) {

for (int j = 0; j < col; j++) {

n++;

d_Array[i][j] = n;

printf("%c ", d_Array[i][j]);

if (n == 'z') {

= 'A' - 1;

}

else if (n == 'Z') n = 'a' - 1;

}

printf("\n");

}

for (int i = 0; i < row; i++) {

free(d_Array[i]);

}

free(d_Array);

return 0;

}

cs
구조체 2차원 배열 동적할당 - gujoche 2chawon baeyeol dongjeoghaldang

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

#pragma warning(disable:4996)

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

int main() {

int N;

int min_length=0;

int min_idx=0;

scanf("%d"&N);

getchar();

char** d_array;

d_array = malloc(sizeof(char** N);

for (int i = 0; i < N; i++) {

d_array[i] = malloc(sizeof(char)*100);

}

for (int i = 0; i < N; i++) {

gets(d_array[i]);

}

min_length = strlen(d_array[0]);

for(int i=1;i<N;i++){

if(min_length>strlen(d_array[i])){

min_length = strlen(d_array[i]);

min_idx = i;

}

}

printf("%s", d_array[min_idx]);

for (int i = 0; i < N; i++) {

free(d_array[i]);

}

free(d_array);

return 0;

}

cs

++심화, 문자열의 길이가 긴 순서대로 정렬하여 출력하기

#pragma warning(disable:4996)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
    int N;
    int min_length = 0;
    int min_idx = 0;
    char* temp;
    scanf("%d", &N);
    getchar();
    char** d_array;
    d_array = malloc(sizeof(char*) * N);
    for (int i = 0; i < N; i++) {
        d_array[i] = malloc(sizeof(char) * 100);
    }
    for (int i = 0; i < N; i++) {
        gets(d_array[i]);
    }

    min_length = strlen(d_array[0]);
    for (int i = 0; i < N; i++) {

        for (int j = 0; j < N - i - 1; j++) {

            if (strlen(d_array[j]) < strlen(d_array[j + 1])) {
                temp = d_array[j];
                d_array[j] = d_array[j + 1];
                d_array[j + 1] = temp;

                             }

        }

    }

         for (int i = 0; i < N; i++) {
        printf("%s", d_array[i]);
        printf("\n");
    }
    for (int i = 0; i < N; i++) {
        free(d_array[i]);
    }
    free(d_array);
    return 0;
}