0
ポインタが違う場合にのみ正しい結果を返すポインタ渡しのC関数を作成しました。例えば:C++関数のポインタ引数が異なる必要があるのはなぜですか?
void dotransform(Point *pout, const Point *pin, transform mat)
{
pout->x = mat[0][0] * pin->x + mat[1][0] * pin->y + mat[2][0] * pin->z + mat[3][0] * 1.0;
pout->y = mat[0][1] * pin->x + mat[1][1] * pin->y + mat[2][1] * pin->z + mat[3][1] * 1.0;
pout->z = mat[0][2] * pin->x + mat[1][2] * pin->y + mat[2][2] * pin->z + mat[3][2] * 1.0;
}
dotransform()
は、このように呼ばれるようになっている:
//...
Transform toWorldMat;
Point local;
Point world;
dotransform(&world, &local, toWorldMat);
問題は、私のチームの誰かがこのようにそれを呼ばれる:
Point p;
dotransform(&p, &p, toWorldMat);
それはちょうど私を取りましたなぜプログラムの最終的な出力が変わったのかを理解するために1週間。
この種の機能を宣言するための最良のスタイルは、このケースを避けるためですか?私はそれを書くのが間違っていますか?
'Point'パラメータ' pin'を1つだけ送信し、そうでなければ役に立たない関数の戻り値を出力結果として使用します。 – WhozCraig
あなたは(おそらく)C++を使っています:このような簡単な例のためにポインタでオブジェクトを渡さないでください。参照渡し。 – Xirema