728x90
2차원 배열을 함수의 매개변수로 전달하려면 동적할당을 이용해야합니다~
예시문제를 보면서 살펴보도록 합시다!
이 문제에서는 c언어에서의 배열이 연속적으로 메모리에 저장된다는 성질을 이용합니다.
2차원배열이라고 해도 메모리에는 연속으로 저장되므로, 일단 함수 매개변수로 받을 때 1차원 배열의 포인터로 받습니다. 그리고 함수 안에서 각 행마다 int**타입을 가지는 배열에 담아줌으로써 2차원 배열로 이용할 수 있습니다!
그림과 같이 일단 int*로 받고(포인터끼리는 형변환이 자유로우니까요!)
int**로 각 행 시작에 해당하는 배열요소의 주소를 넣어주면 됩니다!
int** arr이 있다면 arr[0], arr[1], arr[2]에 각각 3개씩 담아주면 되는거죠.
문제: 2차원배열 값들 중 가장 큰 값 찾기
#include <stdio.h>
#include <stdlib.h>
먼저 malloc 동적할당을 사용하기 위한 stdlib 인클루드 해주고
int Find_2D_Max2(int* A, int row, int col)
{
int** arr = malloc(sizeof(int*) * row);
for (int i = 0; i < row; i++)
arr[i] = A + col * i;
int max = -1;
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
if (max < arr[i][j])
max = arr[i][j];
}
}
return max;
}
요래요래 함수를 만들어줬습니다.
저는 양의 정수에 해당하는 값만 넣을거라 max의 초기값은 -1로 설정해주었습니다.
값이 잘 나오는 걸 알 수 있습니다! 초록색 밑줄은 왜 생기는지 잘 모르겠네요..ㅜ
전체코드 첨부합니다!
#include <stdio.h>
#include <stdlib.h>
int Find_2D_Max2(int* A, int row, int col)
{
int** arr = malloc(sizeof(int*) * row);
for (int i = 0; i < row; i++)
arr[i] = A + col * i;
int max = -1;
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
if (max < arr[i][j])
max = arr[i][j];
}
}
return max;
}
int main()
{
int A[][5] = {
{1,2,3,4,5},
{6,7,8,9,0},
{5,4,3,2,1},
{10,9,8,7,6},
};
int max = Find_2D_Max2(A, 4, 5);
printf("%d", max);
return 0;
}
이 방법 말고도 malloc 2번하는 방법도 있습니다~
그냥 위 코드에서 함수의 첫 번째 for문에 malloc 한 번 더 해주면 됩니다.
엄청 쉽습니다. 저는 요 방법이 더 편하더라고요. 다음에 글 써야겠습니다
728x90
'프로그래밍 언어 > C' 카테고리의 다른 글
전치행렬 구하기(c언어) (0) | 2021.07.03 |
---|