多次元配列を関数に渡すコードを理解しようとしています。しかし、この関数のプロトタイプは興味をそそられています。配列の奇妙なパラメータ回復
プログラムでは、この「タブ」変数を作成:
#define N 8
float tab[N][N];
tab[0][0] = 2; tab[0][1] = 3; tab[0][2] = -1;
tab[1][0] = 3; tab[1][1] = 1; tab[1][2] = -4;
tab[2][0] = 1; tab[2][1] = 2; tab[2][2] = 3;
hello(tab);
をそして、我々はこの機能を持っている:
function hello(float mat[][N]) {
私はいけないハロー機能は[]空とタブの変数を取得する理由を理解し、それから[N]で。それは何が変わるのですか?私は理解していない... [] []タブをしないのはなぜですか?
コードは良い開発者によって作成されたと思われるので、N変数は何も理由がないとは思わない。
私にこのことを説明できる場合は、お時間をいただきありがとうございます!
答えの約半分がここにあります:http://stackoverflow.com/questions/1461432/what-is-array-decaying。それから、後半を推論することができます。配列が減衰すると、最初の次元のサイズが失われます。 – user4581301
コメントを書き直す必要があります。サイズは必ずしも失われません。それは捨てられるかもしれません。 'float mat [] [N]'は、破棄することを選択し、長さ 'N 'の未知数の配列へのポインタになります – user4581301
@ user4581301あなたの答えをありがとう。あなたが私に提供したstackoverflowの答えは、私が理解するために少し高レベルです。 I配列の最初の次元には、2番目の次元の各coloneの開始点のアドレスが含まれていましたが、私の最初の次元の大きさが緩んでいたら、配列から出てsegfaultingすることなく、どうすれば安全に私の第二の次元に到達できますか? – Doctor