二つの問題がここにあります
- Cは、2D配列
と全く同じものであるどちらも2次元配列、配列へのポインタの配列または配列の配列のみをサポートしていません。
- Cは配列を引数として関数に渡すことはできません。配列へのポインタだけです(一般的に、配列の0番目の要素へのポインタを使用します。アレイアクセス)
最初の問題のため、2次元配列(配列の配列または配列へのポインタの配列)をどのように表現するかを決める必要があります。 100個の浮動小数点数の100の配列の配列であることを、あなたはT宣言した。ここ
void set_T(float (*T1)[100]) {
... do stuff with T1[i][j] ...
}
int main() {
float T[100][100];
set_T(T);
}
、およびset_Tは100個のfloatの配列としてへのポインタを取ります:あなたが最初のルートを行く場合は、あなたのコードは次のように見て終わりますその議論。配列名をその0番目の要素へのポインタとして扱う言語として、 'T'を直接set_Tに渡します。
代わりに使用すると、配列へのポインタの配列を使用したい場合は、あなたのようなもので終わる:
void set_T(float **T1) {
... do stuff with T1[i][j] ...
}
int main() {
float *T[100];
float space[100*100];
for (int i = 0; i < 100; i++)
T[i] = space + i*100;
set_T(T);
}
ここでの欠点は、あなたがセカンドレベルアレイのすべてのスペースを割り当てる必要があるということで、すべての第1レベルのポインタを指すように手動で初期化します。利点は、第2レベルの配列のサイズがset_Tに渡される引数の型の一部ではないことです。したがって、可変サイズの配列をより簡単に扱うことができます。もちろん
あなたは本当にC++はなくCを使用している場合、あなたはすべてのCアレイを使用すべきではない - あなたの代わりにstd::vector
かstd::array
を使用する必要があります - C配列1Dのみの問題を共有し、どちらも、あなたはベクトルのベクトルまたは配列の配列(またはおそらく配列のベクトルまたはベクトルの配列)が必要です
可能な複製[関数を渡す](http://stackoverflow.com/questions/8767166)/passing-2d-array-to-function) – legends2k