2012-01-04 5 views
2

私はこれのtypedefを持っていますdddに結果を書いてください。 私はループの上にそれをやった、これはメインラインである:のポインタは、私のCアプリケーションで

*ddd[i][j] = bbb[i][j] + ccc[i][j]; 

が、私はDDDで間違った結果を取得しています。 dddからポインタを削除すると正しい結果が得られますが、ポインタでユーザに返すので、あなたの助けが必要です。

私のコードで何が間違っていますか?

答えて

3

間違ったアドレスで書いています。

(*ddd)[i][j] = bbb[i][j] + ccc[i][j]; 

または単にとにかくポインタの配列の崩壊以来

aaa(mat bbb, mat ccc, mat ddd) 

にプロトタイプを変更する:それはする必要があります。 dddはコピーになりますが、それが指すアドレスは元のアドレスと同じになります。

1

渡す配列は、最初のメンバーのアドレスを渡すのと同じです。あなたの型は配列なので、関数定義に*は必要ありません。

の操作を行います。

aaa(mat bbb, mat ccc, mat ddd) 
{ 
    // whatever 
    ddd[i][j] = bbb[i][j] + ccc[i][j]; 
    // whatever else 
} 

そして、あなたは、配列の最初のメンバーへのポインタを関数の引数の崩壊として使用する配列、Cで

1

もいいですので、すでに参照によって渡されます。したがって、あなたのケースでは、Cコンパイラによるコンパイル中にポインタ変換がすでにフードの下で行われているため、配列への明示的なポインタを渡す必要はありません。

0

[]よりも優先度が高い*は、かっこを使用する必要があります。

(*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は既に行列へのポインタであり、上記のコードは正常に動作します。