2차원 배열 매개변수로 사용할 때 문법 문의
조회수 4740회
1) 2차원 배열을 함수의 매개변수 사용시, 가로 크기를 명시해야 한다는데 왜 그런가요...? 2) 보통 다음과 같이 배열 크기를 알려주는 col과 row 값을 따로 받던데, 배열크기 5를 생략할 수 있지 않나요? 3) row 값이 6이면... 함수도 int arr[][6]으로 매번 수정해야 하나요?
ex)
void print2DArray(int arr[][5], int col, int row)
{
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
}
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
type arr[32];
arr arr+1 arr+2 .__________.__________.__________.__________.__ | | | | | .__________.__________.__________.__________.__ \___ ___/ v sizeof(type)
int arr[32][4];
&(arr[0]) &(arr[1]) .. arr arr+1 arr+2 .__________.__________.__________.__________.__ | | | | | .__________.__________.__________.__________.__ \___ ___/ v sizeof(int[4]) = 4*sizeof(int)
이렇게 되요. 그런데, 함수호출 인자로 넘어가면, 배열변수는 포인터값만 넘어가기 때문에 호출된 쪽에서는 배열의 요소를 접근할 때 얼마만큼의 단위로 포인터연산을 해야할 지 모릅니다. 그래서, 다차원배열일 때에, 최상위 배열의 크기는 생략하더라도, 하위배열의 크기는 생략할 수 없는 겁니다.
2019-04-10 추가
배열의 크기가 다른 2차원 배열에 사용할 수 있는 함수 예제입니다.
int print_array(int *arr, int n_row, int n_col) { int i, j; for (i = 0; i < n_row; i++) { for (j = 0; j < n_col; j++) { printf("%d\t", *(arr + i*n_col + j)); } printf("\n"); } printf("----------------\n"); return 0; } int main() { int a[2][2] = { {0, 1}, {2, 3} }; int b[4][3] = { {0, 0, 0}, {1, 1, 1}, {2, 2, 3}, {3, 3, 4} }; print_array((int*)a, 2, 2); print_array((int*)b, 4, 3); return 0; }
- 헛 그렇군요... 그러면 void print2DArray(int arr[][5], int col, int row) 함수는 하위배열이 크기가 5일 때만 사용이 가능한가요....? 모든 크기의 2차원 배열을 print 할 수 있는 함수는 못만드나요..? 알 수 없는 사용자 2019.4.10 00:21
댓글 입력