티스토리 뷰
반응형
2차원 배열을 함수의 매개변수로 전달하는 예제는 여러 가지 방법으로 구현할 수 있다. 여기서는 일반적인 2차원 배열을 함수로 전달하는 몇 가지 방법을 알아보자.
1. 열 크기를 명시하여 전달
2차원 배열을 함수로 전달할 때, 함수 매개변수에서 배열의 열 크기를 명시해야 한다. 예를 들어, 3x4 배열을 전달하는 경우는 다음과 같이 작성할 수 있다.
#include <stdio.h>
// 함수 정의: 열의 크기를 명시
void printArray(int rows, int cols, int arr[rows][cols]) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
}
int main() {
int arr[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
// 함수 호출
printArray(3, 4, arr);
return 0;
}
위 예제에서는 printArray
함수가 arr
배열의 크기를 알기 위해 rows
와 cols
를 매개변수로 받는다.
2. 배열 포인터 사용
배열 포인터를 사용하여 2차원 배열을 전달할 수도 있다. 이 방법에서는 포인터를 사용하면, 열의 크기를 명시해도 행의 크기를 명시하지 않아도 된다.
#include <stdio.h>
// 함수 정의: 배열 포인터를 사용
void printArray(int rows, int cols, int (*arr)[4]) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
}
int main() {
int arr[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
// 함수 호출
printArray(3, 4, arr);
return 0;
}
여기서는 int (*arr)[4]
로 2차원 배열을 전달하며, 배열 포인터를 통해 접근할 수 있다. 이때 열의 크기 [4]
는 고정된 크기로 함수의 매개변수에 명시되어야 한다.
3. 포인터와 인덱스 계산 사용
2차원 배열을 1차원 배열처럼 취급하고 인덱스 계산을 통해 접근하는 방법도 있다.
#include <stdio.h>
// 함수 정의: 1차원 배열로 처리
void printArray(int rows, int cols, int *arr) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("%d ", arr[i * cols + j]);
}
printf("\n");
}
}
int main() {
int arr[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
// 함수 호출: 배열의 시작 주소를 전달
printArray(3, 4, (int *)arr);
return 0;
}
이 방법은 arr
을 1차원 배열로 전달하고, 인덱스를 계산하여 2차원 배열의 각 요소에 접근하게 된다.
이 방법이 가능한 이유는 2차원 배열이 연속된 메모리에 저장되기 때문이다. 따라서 2차원 배열 포인터를 1차원 배열 포인터로 캐스팅한 후 1차원 배열 접근으로 2차원 배열의 모든 요소에 접근할 수 있게 된다.
반응형
'C 언어' 카테고리의 다른 글
C 언어] 2차원 배열 포인터 사용법 (0) | 2024.10.21 |
---|---|
C 언어] 포인트 상수 / 상수 포인터 / 상수 포인터 상수 (0) | 2024.10.21 |
댓글
공지사항