0

2 次元配列の 1 次元を動的に割り当てようとしています。配列は次のように宣言されます。

uint16_t coord[][2];

行、座標の数を割り当てるだけです。グーグルで、次から始めて、両方のディメンションを割り当てるのに十分なコードを見つけました。

uint16_t **coord;

上記のように配列を宣言できるかどうかはわかりません。私はする必要がありますか:

uint16_t *coord[2]; 

か否か?

他の関数が次のように配列にアクセスできるように、割り当て関数から配列 (配列へのポインター) を返す必要もあります。

foo = coord[4][0];
bar = coord[4][1];

割り当てられた配列を返す正しい方法は何ですか?

4

2 に答える 2

5

時計回り/らせんの規則に従って、次の宣言:

uint16_t *coord[2];

は 2 つのポインターの配列ですが、これはあなたが望むものではないようです。ただし、代わりにこれを使用できます。

uint16_t (*coord)[2];

次のようにメモリを割り当てることができます。

coord = malloc(num_entries * sizeof(uint16_t[2]));

これで、通常の多次元配列としてアクセスできます。

coord[0][0] = 1;
coord[0][1] = 2;
coord[1][0] = 3;
coord[1][1] = 4;
于 2012-06-20T08:37:18.097 に答える
0

配列とポインタが混在していますが、これらは同じではありません。

uint16_t coord[][2];

1 つのディメンションを定義していないため、不完全なタイプです。初期化子を使用してその次元を修正します。あなたはその概念にあまり慣れていないようですので、1 次元の概念でウォームアップしたほうがよいでしょう:

uint16_t line[] = { 1, 2, 3 };

3つの要素を与えます。

于 2012-06-20T08:38:04.333 に答える