C言語で二次元配列を引き渡す方法は何ですか?
C言語では、二次元配列を関数に引数として渡す方法は2つあります。
- 配列をポインタで渡す:
- 関数に二次元配列の先頭アドレスをパラメータとして渡す。
- 関数内では、配列要素にアクセスするためにポインタ操作を使用します。
- 以下はサンプルコードです。
- void func(int (*arr)[M], int row, int col) {
// 配列要素へのポインタ操作を使用
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
printf(“%d “, arr[i][j]);
}
printf(“\n”);
}
}int main() {
int arr[N][M] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };
int row = N;
int col = M;// 配列の先頭アドレスを関数に渡す
func(arr, row, col);return 0;
} - 配列を渡すために一次元配列を使用します。
- 2次元配列を1次元配列に変換します。
- 関数に一次元配列の最初の要素のアドレスをパラメータとして渡す。
- 関数の中で、配列の要素にアクセスする際には、インデックスを計算します。
- 以下はサンプルコードです:
- void func(int *arr, int row, int col) {
// インデックス計算を使って配列要素にアクセスする
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
printf(“%d “, arr[i * col + j]);
}
printf(“\n”);
}
}int main() {
int arr[N][M] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };
int row = N;
int col = M;// 二次元配列を一次元配列に変換し、配列の先頭アドレスを関数に渡す
func((int *)arr, row, col);return 0;
}
どちらの方法も、二次元配列を関数に引数として渡すことができます。どちらの方法を選ぶかは、具体的な要件とプログラミングの習慣によります。