0

私はCプログラミングにかなり慣れていないので、我慢してください:) 2D配列(別名行列)を生成するmain()があります。main()から2つの行列を取得し、それらを乗算して返す「外部」関数matrix_multipl()を定義しようとしましたが、もちろん問題が発生しました(関数から配列を返すことはできません)。

したがって、私のアプローチは次のとおりです。プロセスを正しく理解しているかどうかを知りたいです。

main内に配列(first [m] [n]、second [o] [p]、outcome [m] [p]行列)を生成し、そこからその配列へのポインターのみを使用するため、ポインターを呼び出すとmatrix_multipl()内のその配列に対して、基本的にmainに戻り、配列からそれぞれの値をフェッチし、それを使って何かを実行し(行列の乗算)、最後に計算された値を取得し、main()に再度実行して、結果を書き込みます。常にmain()内にとどまり、したがって「返される」必要がなかった、outcome [m] [p]行列に入れますか?

大きな配列を前後に押し込むのを防ぐので、それは絶対に論理的で非常に便利に聞こえるので、私はそれを正しく理解したことを願っています:)

4

3 に答える 3

1

'がmain()に戻る'の意味を完全に理解しているかどうかはわかりませんが、そうです、あなたが話しているように見えることは、一般に'参照渡し'と呼ばれ、Cで一般的に使用される手法です。プログラミング。

于 2013-01-02T21:56:38.317 に答える
0

「本質的にメインに戻る」ことはなく、matrix_multiply()はマトリックスポインタが指すメモリにアクセスします。

そして、他の答えの1つと「参照渡し」に関して、Cは常に「値渡し」を使用します-これが、行列自体ではなくポインターを渡さなければならない理由です(実際にmatrix_multiplyに渡されるのはmainで定義したポインタのコピー)。

于 2013-01-02T21:59:41.250 に答える
0

配列の開始メモリアドレスを参照します(参照による)。

void matrix_multiply(int *array1, int *array2, int *answer) {
// matrix multiply operation.
}

大会:

&array[0]パラメータを満たすために関数に渡されます*array

于 2013-01-02T22:10:41.070 に答える