ひかりの備忘録

C 言語で 2 次元配列を扱う

行数・列数、数値の入るメモリを構造体でまとめると扱いやすい。

#include <stdio.h>
#include <stdlib.h>

typedef struct {
  float *data;
  int col_size;
  int row_size;
} Mat;

void MatInit(Mat *mat, int row_size, int col_size) {
  mat->row_size = row_size;
  mat->col_size = col_size;
  mat->data = (float *)calloc(row_size * col_size, sizeof(float));
}

float *MatAt(Mat *mat, int i, int j) {
  return mat->data + i * mat->col_size + j;
}

void MatFree(Mat *mat) { free(mat->data); }

int main(void) {
  Mat mat;
  MatInit(&mat, 30, 5); // 30 行 5 列 の行列を初期化
  *MatAt(&mat, 0, 0) = 50; // 行 0 列 0 に 50 を代入
  printf("%f\n", *MatAt(&mat, 0, 0)); // 行 0, 列 0 の数値を表示

  MatFree(&mat);

  return 0;
}