私は現在、宿題に問題があり、参照渡しを使用して行列の問題を解決するプログラムを作成するように求められていますが、それがどのように行われるのか理解できません。参照渡しを使用して行列の加算を解く簡単なコードを教えてください。ありがとう..
質問する
456 次
1 に答える
1
mat4_t タイプと mat4_add 関数が定義されているとしましょう。
typedef ... mat4_t;
「コピーによる」アプローチでは、次のようになります。
mat4_t mat4_add(mat4_t m1, mat4_t m2);
mat4_t m1, m2, m3;
m3 = mat4_add(m1, m2);
関数 mat4_add は 2 つの引数を取り、新しい行列を返します (コピーによる)。
「参照による」では、次のようになります。
void mat4_add(mat4_t *sum, const mat4_t *m1, const mat4_t *m2);
mat4_t m1, m2, m3;
mat4_add(&m3, &m1, &m2);
関数は、ソース行列 (m1、m2) へのポインターと、行列の合計を格納するメモリへのポインターの両方を受け取ります。
最初のアプローチ: m1 と m2 の両方が関数スタックにコピーされるため、スタックは 2*sizeof(mat4_t) だけ大きくなり、行列データがコピーされます。その後、関数スタックは、計算結果を格納するために別の sizeof(mat4_t) だけ大きくなります。その結果は、関数の戻り値から値が代入されるときに return ステートメントでもう一度コピーされます。
一方、「参照による」ポインタでは、対処する必要はありません。そのアプローチは高速で (コピーは必要ありません)、メモリ効率が高くなります。
また、C には参照によるコピーのようなものはありません。すべて値渡しです。 Cで参照渡し中に何が起こりますか?
于 2012-11-21T13:40:38.030 に答える