2 C 言語での1次元配列 (とそれに似たもの)

ベクトルのような、1次元に連続に並んでいるデータをC言語で扱う場合に、 言語のどのような機能が利用できるか、復習しておこう。

例 (一部 ... で略しているので、このままコンパイルは出来ないけど)
/* 3つのやり方の例示 */
#include <stdlib.h> // malloc() に必要

#define N (10)
double a[N]; // 静的変数

int main(void)
{
  ...
  double b[N]; // 自動変数
  double *c;   // c は double へのポインター
  c = malloc(sizeof(double) * N); // malloc() でメモリを割り当てる。
  if (c == NULL) // 割り当てに成功したかどうかチェックできる。
  ...
  for (i = 0; i < N; i++)
    c[i] = a[i] + b[i]; // a, b, c どれも同じように使える。
  ...
  free(c); // 不要になったらメモリを解放する必要がある。
}
$ 0\le i\le \texttt{N-1}$ を満たす $ i$ に対して、 a[$ i$ ], b[$ i$ ], c[$ i$ ] が使える。 そういう意味では似ているけれど、違いがある。

実際上はどのやり方を採用してもあまり問題にならないことが多い、と思われる。

桂田 祐史
2017-03-06