2次元配列を関数に渡したい(その2)/関数の関数を作りたい

2次元配列を関数に渡したい/3次元配列を取りたい のページでは、 と書きましたが、当研究室4回生(2008年度)の松本昇吾さんから、 「2次元配列も関数に渡せる」し「3次元配列も取れる」という 情報をもらいました。以下、ご本人作成による例です。 gcc,g++ での動作確認は行なわれていますが、 動作保証はしませんとのことですので、 確認の上お使い下さい。

なお、例は int 型の配列や関数で作られていますので、 用途によって float や double に変更してください。

------------------------------------------------------
/* 2次元配列を扱うプログラム例 */
#include <stdio.h>
#include <stdlib.h>

/* 2次元配列の領域確保 */
int **malloc_2dim_array(int row, int col) {
  int i;
  int **array;
  array = (int **)malloc(row * sizeof(int *));
  for (i = 0; i < row; i++)
    array[i] = (int *)malloc(col * sizeof(int));
  return array;
}

/* 2次元配列の開放 */
void free_2dim_array(int **array, int row, int col) {
  int i;
  for (i = 0; i < row; i++)
    free(array[i]);
  free(array);
}

/* 2次元配列の表示 */
void print_2dim_array(int **array, int row, int col) {
  int i, j;
  for (i = 0; i < row; i++) {
    for (j = 0; j < col; j++)
      printf("%d ", array[i][j]);
    printf("\n");
  }
}

/* 2次元配列を扱うプログラム */
int main() {
  const int ROW = 2;
  const int COL = 3;

  int **array = malloc_2dim_array(ROW, COL);
  
  array[0][0] = 1; array[0][1] = 2; array[0][2] = 3;
  array[1][0] = 4; array[1][1] = 5; array[1][2] = 6;
  
  print_2dim_array(array, ROW, COL);
  
  free_2dim_array(array, ROW, COL);

  return 0;
}
------------------------------------------------------


Last modified: Thu Feb 19 11:16:50 2009