1

関数にパラメーターとして渡されるときに C 配列の要素数 (次の例では 10) を指定する必要があるのはなぜですか?

void myFun(int arr[][10]) {}

アクセスされるセルのアドレスを決定するために要素の数が必要だからでしょうか。

4

3 に答える 3

3

はい。これarr[i][j]は、 ((int *)arr)[i * N + j]if arris an int [][N]: ポインター演算には行の長さが必要であることを意味するためです。

于 2012-03-30T12:41:09.900 に答える
1

コンパイラは、次の行がメモリ内でいつ開始されるかを把握する必要があります (2D 配列はメモリの連続したチャンクであり、行が次々と続くため)。コンパイラはサイケではありません!

于 2012-03-30T12:44:07.237 に答える
1

配列の考えに静的割り当てを使用した場合にのみ必要です。生成コードは、ruakh が指摘したように、配列用の連続したメモリ ブロックを作成するためです。

ただし、動的割り当てを使用する場合は必要ありません。ポインターを渡すだけで済みます。

よろしく

于 2012-03-30T12:44:14.670 に答える