私はこれのtypedefを持っていますdddに結果を書いてください。 私はループの上にそれをやった、これはメインラインである:のポインタは、私のCアプリケーションで
*ddd[i][j] = bbb[i][j] + ccc[i][j];
が、私はDDDで間違った結果を取得しています。 dddからポインタを削除すると正しい結果が得られますが、ポインタでユーザに返すので、あなたの助けが必要です。
私のコードで何が間違っていますか?
私はこれのtypedefを持っていますdddに結果を書いてください。 私はループの上にそれをやった、これはメインラインである:のポインタは、私のCアプリケーションで
*ddd[i][j] = bbb[i][j] + ccc[i][j];
が、私はDDDで間違った結果を取得しています。 dddからポインタを削除すると正しい結果が得られますが、ポインタでユーザに返すので、あなたの助けが必要です。
私のコードで何が間違っていますか?
間違ったアドレスで書いています。
(*ddd)[i][j] = bbb[i][j] + ccc[i][j];
または単にとにかくポインタの配列の崩壊以来
aaa(mat bbb, mat ccc, mat ddd)
にプロトタイプを変更する:それはする必要があります。 ddd
はコピーになりますが、それが指すアドレスは元のアドレスと同じになります。
渡す配列は、最初のメンバーのアドレスを渡すのと同じです。あなたの型は配列なので、関数定義に*
は必要ありません。
の操作を行います。
aaa(mat bbb, mat ccc, mat ddd)
{
// whatever
ddd[i][j] = bbb[i][j] + ccc[i][j];
// whatever else
}
そして、あなたは、配列の最初のメンバーへのポインタを関数の引数の崩壊として使用する配列、Cで
もいいですので、すでに参照によって渡されます。したがって、あなたのケースでは、Cコンパイラによるコンパイル中にポインタ変換がすでにフードの下で行われているため、配列への明示的なポインタを渡す必要はありません。
[]よりも優先度が高い*は、かっこを使用する必要があります。
(*ddd)[i][j] = bbb[i][j] + ccc[i][j];
dddをポインタとして渡す必要はありません。
aaa(mat bbb, mat ccc, mat ddd)
ddd[i][j] = bbb[i][j] + ccc[i][j];
dddは既に行列へのポインタであり、上記のコードは正常に動作します。