以下の宣言が与えられているかどうかを知りたい:
int first[1][COLUMN_NUMBER];
int second[COLUMN_NUMBER];
2 つの 2 次元配列には、同じ方法または類似の方法でアクセスできます。私が言いたいのは、それらは交換可能ですか?アップグレードのために、以前に書いたすべてのコードのリファクタリングを避けたいので、これを求めています。
どうもありがとう。
以下の宣言が与えられているかどうかを知りたい:
int first[1][COLUMN_NUMBER];
int second[COLUMN_NUMBER];
2 つの 2 次元配列には、同じ方法または類似の方法でアクセスできます。私が言いたいのは、それらは交換可能ですか?アップグレードのために、以前に書いたすべてのコードのリファクタリングを避けたいので、これを求めています。
どうもありがとう。
このコードによると、違いはないはずです。
#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;
}
2D 配列と同じサイズの 1D 配列は同じ/類似していませんが、2D 配列は1D 配列として表すことができます(厳密に言えば、動作は未定義です)。
私が言いたいのは、それらは交換可能ですか?
状況により前後する場合がございます。
関数を呼び出すことでわかる簡単な違い
void foo(int *p)
{
}
2つの場合。はまたはを渡すことでfirst
に渡すことができます(ここでとは型であり、バインドされた配列内の行と列のインデックスを表します)。一方、配列はまたはとして渡すことができます。(unlike ) および(unlike ) を引数としてに
渡すことはできません。foo
&first[i][j]
*first
first[i]
i
j
int
second
second
&second[i]
first
second
second[i]
first[i]
foo
foo
int *