2012-03-30 26 views
1

C-配列の要素数を関数にパラメータとして渡す場合(次の例の10)、なぜそれが必要なのですか?要素の数は、アクセスされているセルのアドレスを決定するために必要とされるので、多次元配列をC言語の関数に渡す

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

は、それはそうですか?

答えて

3

はい。 arr[i][j]の意味は((int *)arr)[i * N + j]arrint [][N]の場合です。ポインタ演算には行の長さが必要です。

1

コンパイラは、次の行がメモリで開始するときにアイデアを持たせる必要があります(2D配列は単なる連続したメモリのチャンクであり、もう1つの行は次の行です)。コンパイラはpsycheではありません!

1

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

しかし、ダイナミックアロケーションを使用する場合、ポインタは渡す必要はありません。

よろしくお願いいたします。