はCでは、あなたがしたい方法で変数を入力する関数の戻り値の型宣言のようなコンテキストに適用されますそれらを使用してください。
「冷凍式」のようなものです。
ので
int x[5][2];
あなたは[]
で2
までの値であり、何がその値がint
であるために割り当て、その後、[]
に5
までの最初の値を渡してx
を使用すると思います意味します。
ある意味では、これは表現解析エンジンを使用して物事を入力します。
typedef
は、変数が何でもその型のエイリアスになることを除いて、変数の宣言と同じように機能します。だからではなく、
typedef int[3][3] matrix_t;
のそれは、このタイプの別名を定義するための変数宣言の構文解析/文法を再利用し、再び
typedef int matrix_t[3][3];
です。 C++ 11では
、我々はより多くのあなたが望むかもしれないように動作します
using
を持っている:
using matrix_t = int[3][3];
あなたの問題の最後の部分はCで行列をコピーまたは値によって渡すことができないということです。関数パラメータとしてint[3][3]
の型はint[3]*
型になります - int[3]
へのポインタです。また、int[3][3]
型の期間を返すことはできません。 C++で
、これはstd::array
を介して固定されている:
std::array< std::array< int, 3 >, 3 >
は、(少なくとも、実際に)レイアウトint[3][3]
と互換性のあるタイプであるが、それでもに/関数の値と同様の周りに渡すことができます。 Cでは、あなたは何だろう:上記std::array
としてメモリ内の同じレイアウトを持ち、その値のような関数に/から渡すことができる
struct matrix {
int data[3][3];
};
を。
'typedef int matrix_t [3] [3]' – Brian
または 'matrix_t = int [3] [3]' – Brian
を使用しています。 –