3

以下の宣言が与えられているかどうかを知りたい:

int first[1][COLUMN_NUMBER];
int second[COLUMN_NUMBER];

2 つの 2 次元配列には、同じ方法または類似の方法でアクセスできます。私が言いたいのは、それらは交換可能ですか?アップグレードのために、以前に書いたすべてのコードのリファクタリングを避けたいので、これを求めています。

どうもありがとう。

4

3 に答える 3

3

このコードによると、違いはないはずです。

#include <stdio.h>

int main(void) {
    int const COLUMN_NUMBER = 10;
    union {
      int first[1][COLUMN_NUMBER];
      int second[COLUMN_NUMBER];
      } u;
    u.first[0][5] = 3;
    printf("%d\n", u.second[5]);
    return 0;
}
于 2013-10-22T10:49:01.570 に答える
1

2D 配列と同じサイズの 1D 配列は同じ/類似していませんが、2D 配列は1D 配列として表すことができます(厳密に言えば、動作は未定義です)。

私が言いたいのは、それらは交換可能ですか?

状況により前後する場合がございます。
関数を呼び出すことでわかる簡単な違い

void foo(int *p)  
{

}

2つの場合。はまたはを渡すことでfirstに渡すことができます(ここでとは型であり、バインドされた配列内の行と列のインデックスを表します)。一方、配列はまたはとして渡すことができます。(unlike ) および(unlike ) を引数としてに 渡すことはできません。foo&first[i][j]*firstfirst[i]ijintsecondsecond&second[i]
firstsecondsecond[i]first[i]foofooint *

于 2013-10-22T11:04:16.060 に答える