2016-03-27 3 views
0

intの配列へのポインタを持ち、j + 1からj + 3までのセルに初期座標値を宣言します。 jの反復はオブジェクトの単なる単なるものです。 j + 4からj + 6までのセルでは、次のステップでオブジェクトを移動する必要があるため、速度ベクトル値x、y、zを割り当てます。 YおよびZは、より興味深い何が0に等しいままYおよびZ速度ベクトルが0に等しく - 私はポインタのみx値が増大するのarithemticでX、Y、Z COORDSを増加させる試みが後C - 1つのポインタ座標だけが加算され、残りは0に等しくなります。

int * objects = (int *)malloc(amount_of_objects * 7 * sizeof(int)); 
if (x_vector != 0 || y_vector != 0 || z_vector != 0) { 
for (int j = 0; j < amount_of_objects; ++j) { 
    *(objects + (j * 4)) = j; 
    *(objects + (j * 4 + 1)) = x_start; 
    *(objects + (j * 4 + 2)) = y_start; 
    *(objects + (j * 4 + 3)) = z_start; 
    *(objects + (j * 4 + 4)) = x_vector; 
    *(objects + (j * 4 + 5)) = y_vector; 
    *(objects + (j * 4 + 6)) = z_vector; 
}` 

どういうわけか。

for (int k = 0; k < current_amount_of_objects; ++k) { 
    *(objects + k * 7 + 1) += *(objects + k * 7 + 4); 
    *(objects + k * 7 + 2) += *(objects + k * 7 + 5); 
    *(objects + k * 7 + 3) += *(objects + k * 7 + 6); 
}` 

どうしてですか?ポインタでsthを止めていますか?何か提案してください?

+0

コードを '*(objects +(j * 7 + 0)) 'と対称にすることもできます。最適化されていないコンパイラであっても、ゼロは加算されません。 –

+1

配列表記法を使用すると、あまり混乱はありません。 –

答えて

3

あなたが「オブジェクト」あたり7つのint型を持っていますが、何らかの理由であなたが乗じている4.

あなたのコードは次のようになります。

for (int j = 0; j < amount_of_objects; ++j) { 
    *(objects + (j * 7)) = j; 
    *(objects + (j * 7 + 1)) = x_start; 
    ... 

このコードは、より明確にし、少ないだろうエラーが発生しやすいです7つのintを含む構造体を作成し、それらの構造体の観点から作業した場合。

+0

ああ、それを指し示すためのthx、それは大きな配列を作成した後に変更するのを忘れたコードの一部だった+それはちょっと遅く、私はそれを見つけることができませんでした。 – cooktheprogrammer

2

最初のコードブロックで4倍、2番目のコードブロックで7倍になります。アクセスのレイアウトを同じにしたい場合は、同じサイズを使用する必要があります。インデックスはy*Y_SIZE + xです。あなたは一度に7つの値を書いているので、私はあなたが7ではなく4で乗算したいと思っています。

また、今後この問題を回避するために、サイズをハードコードしないでください。

関連する問題