3

しばらく前に、次のような構造に「多次元配列」という用語を使用すると (コミットで) 言われた質問をしました。

int **a;

次のように初期化します。

a = malloc(n * sizeof(*a));
for (i = 0; i < n; ++ i)
    a[i] = malloc(m * sizeof(*a[i]));

誤解を招く可能性があり、これは多次元配列の「単なるエミュレーション」です。英語のネイティブ スピーカーではないので、適切な用語を理解するのに苦労しています。残念ながら、用語について不満を言った男は、自分自身を助けることはできませんでした.

案の定、「多次元配列のエミュレーション」という用語は、テキスト/会話で実際に使用するには長すぎます。

総括する:

  • 上記の構造の適切な用語は何ですか (違いがある場合は特に C で)?

副次的な質問:

  • この用語は言語に依存していませんか? そうでない場合、たとえば C++ ではどのように呼び出されますか?

注:あなたの答えが参照にリンクされていれば幸いです。
編集:この構造との違いを理解していint a[n][m];ます。それは問題ではありません。

アップデート

割り当てられるメモリは必ずしも規則的ではありません。この構造はより正確です。

a = malloc(n * sizeof(*a));
for (i = 0; i < n; ++ i)
  if (needed[i])
    a[i] = malloc(m[i] * sizeof(*a[i]));
  else
    a[i] = NULL;
4

4 に答える 4

7

これらは「ジャグ配列」と呼ばれているのをいつも聞いていました。各サブ配列が同じ長さであっても、長さが異なる可能性があるため、「ジャグ配列」という用語が使われています。(真の多次元配列では、各次元のサイズは固定されており、この場合、最初の次元のみが真に固定されています。)

于 2012-07-20T04:18:26.960 に答える
1

これは「配列 (へのポインター) の配列」であり、この用語はさまざまな言語で理解されており、要素配列の長さが等しい (正方形 AoAs) かそうでない (ギザギザ AoA) かに関係なく適用されます。

于 2012-07-20T04:35:28.850 に答える
1

「ネストされた配列」、または「配列の配列 [of ...]」。

さまざまな次元をサポートしているとは思いませんが、Boost はこのあいまいな空間 ( http://www.boost.org/libs/multi_array/doc/user.html ) で製品を提供しています。何か新しいものを実装している場合。

于 2012-07-20T05:42:32.653 に答える
0

c-faqで行うように、この構成を「シミュレートされた多次元配列」と呼びます。その用語が長すぎると思われる場合は、「シミュレートされた2次元配列」などと言うことができます.ただし、int **a;多次元配列として参照することは絶対に行わないでください.型はポインタへのポインタintです. 違いは、ポインターを使用して配列を作成できることですが、それらは常にポインターのままです。また、ポインターの配列 ( int *a[10];) を使用してジャグ配列を作成することもできるため、用語は具体的に何を持っているかを示しているわけではありません。

于 2012-07-20T04:55:20.910 に答える