掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
構造体に配列アクセス? (ID:60523)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
.NET2003(C++)とDirectX9SDKで開発しています。 以下のように点と点の距離を求める関数を作ったのですが、最初勘違いして配列のように[]でアクセスしていたのですが、その後間違いに気づいて.xや.zのようなアクセスに直しました。 ところがバグの影響を調べるために色々試してみると、前者の[]のアクセス方法でも正しく動いているのを発見しました。 個人的には[]では全然違う場所(メモリ)を参照するため絶対に駄目そうに思うのですが、なぜ上手く動くのでしょうか? それとも私が何か初歩的な勘違いをしているのでしょうか? もしくはD3DXVECTOR3の宣言に秘密があるのでしょうか?一応[]のオーバーロードとかはしてないようなのですが… float getXZLength( D3DXVECTOR3 &pos0, D3DXVECTOR3 &pos1 ) { float xLen,zLen; //正しい xLen = pos0.x - pos1.x; zLen = pos0.z - pos1.z; //間違い // xLen = pos0[0] - pos1[0]; // zLen = pos0[2] - pos1[2]; return sqrtf( xLen * xLen + zLen * zLen ); } ちなみにD3DXVECTOR3の宣言はこれです。 typedef struct D3DXVECTOR3 : public D3DVECTOR { public: D3DXVECTOR3() {}; D3DXVECTOR3( CONST FLOAT * ); D3DXVECTOR3( CONST D3DVECTOR& ); D3DXVECTOR3( CONST D3DXFLOAT16 * ); D3DXVECTOR3( FLOAT x, FLOAT y, FLOAT z ); // casting operator FLOAT* (); operator CONST FLOAT* () const; // assignment operators D3DXVECTOR3& operator += ( CONST D3DXVECTOR3& ); D3DXVECTOR3& operator -= ( CONST D3DXVECTOR3& ); D3DXVECTOR3& operator *= ( FLOAT ); D3DXVECTOR3& operator /= ( FLOAT ); // unary operators D3DXVECTOR3 operator + () const; D3DXVECTOR3 operator - () const; // binary operators D3DXVECTOR3 operator + ( CONST D3DXVECTOR3& ) const; D3DXVECTOR3 operator - ( CONST D3DXVECTOR3& ) const; D3DXVECTOR3 operator * ( FLOAT ) const; D3DXVECTOR3 operator / ( FLOAT ) const; friend D3DXVECTOR3 operator * ( FLOAT, CONST struct D3DXVECTOR3& ); BOOL operator == ( CONST D3DXVECTOR3& ) const; BOOL operator != ( CONST D3DXVECTOR3& ) const; } D3DXVECTOR3, *LPD3DXVECTOR3;
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.