2009-08-10 10 views
2

私はfloat rtmp1 [NMAX * 3] [3]の配列を持ち、rtmp1 [i] [n]として使用され、nは0から2までです。私は0から3 * NMAX - 1です。しかし、rtmp1をrtmp1 [3 * 3 * NMAX]に変換したいと思います。 rtmp1 [3 * i + n]がrtmp1 [i] [n]と等価であるとしてこの新しい1D配列を扱うか?明確化のために事前に感謝します。C++:2D配列対1D配列の違い

+0

0から(3 * NMAX) - 1ではありませんか? – KTC

+0

明確化してください。 "私は0から2までです"またはrtmp1 [3 * 4 * NMAX]を意味しますか? –

+0

@KTC:はい、私はそれを修正しました @bill weaver:あなたの質問を明確にしてください。 – stanigator

答えて

4

rtmp1 [i]の[n]はrtmp1と等価である[私はNMAX + nを*]

あなたNMAXがどこにあるか、http://www.cplusplus.com/doc/tutorial/arrays/を参照してください。その幅。

+0

私がしようとしていた主な目標は、2D配列から擬似2D配列に変換することです。あなたの答えは私が受け入れるものです。ありがとう。 – stanigator

0

はい、これを行うことで何を証明しようとしていますか? rtmp1 [i] [n]は実行時間が長くなり、読みやすくなります。

"実際には、rtmp [i + 3 * n]を使いたいでしょうか?違いは何ですか?あなたがやっているのは、アドレスを交換することだけです。

+0

実行時までサイズがわからないため、rtmp1を1D配列に動的に割り当てるようにしようとしています。 NMAXは静的に割り当てられる本当に大きな数です。現在の実装はメモリ消費に関して非常にゲットーです。 – stanigator

0

一部のエイリアス防止ルールが破られることはありません。私の読書はそれが問題ないということですが、私はすでに間違っていて、時には、標準の異なる部分で2つの相反するルールのどちらが優先されているかを知るために全領域が混乱して大胆である。

Exemple:

typedef float Point[3]; 

void f(float* tab, Point* pt) 
{ 
    (*pt)[2] = 6; 
    // I don't think the compiler can assume that (*pt)[2] isn't modified by 
    tab[5] = 3.141592; 

}

// context which give a problem if I'm wrong. 
float rtmp1[NMAX*3][3]; 
float *ptr = &rtmpl[0][0]; 
f(ptr, rtmpl[1]); 
関連する問題