동적메모리 할당예제 - 2차원 배열 |
2차원 배열에 메모리를 할당하기 위해서는 이중포인터를 활용해야합니다.
1차원 배열의 메모리 할당과는 다르게 두가지 스텝으로 분류해서 이 과정을 이해할수 있습니다.
먼저 2차원 배열의 행과 열을 row (행), column(열)로 두었을때 선행되는 작업은 row 행만큼 정수형 포인터의 메모리를 할당하는 것입니다.
d_Array= malloc(sizeof(int *) * row) // 1차원 배열을 row개 만큼 메모리 할당한다고 이해할수 있습니다.
그리고 할당된 row개의 메모리 공간에 가로길이 col 만큼(열에 해당) 메모리를 할당해줍니다.
이 각각은 1차원 배열이므로 기존에 알고있던 배열의 메모리할당을 떠올리면 쉽습니다.
for(int i=0;i<N;i++){
d_Array[i]=malloc(sizeof(int) * col)
}
위와 같은 방법으로 2차원배열에 메모리를 할당할수있습니다.
예제풀이 1, 2 |
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') {
n = '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 |
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;
}
'지난 학기들의 기록 > C 기초' 카테고리의 다른 글
[C실습] 파일 입출력 예제 - 특정 문자열 검색하기 (2) | 2020.08.27 |
---|---|
[C실습] 동적할당 예제 - realloc함수를 쓰지않고 배열의 크기 바꾸기 (0) | 2020.08.22 |
[C실습] BOJ/10809 + 문자열과 포인터 예제 (0) | 2020.06.14 |
[C실습] 배열예제 - 2차원 배열에서 다른 배열찾기 (0) | 2020.06.08 |
[C실습] 배열예제 -초를 입력받고 그 후의 시,분,초 구하기 (0) | 2020.06.02 |
댓글