我有一个浮点数rtmp1 [NMAX * 3] [3],它用作rtmp1 [i] [n],其中n是0到2,i是0到3 * NMAX - 1.但是,我想将rtmp1转换为rtmp1 [3 * 3 * NMAX]。将这个新的一维数组作为rtmp1 [3 * i + n]来对应于rtmp1 [i] [n]吗?提前感谢您的澄清。
答案 0 :(得分:4)
rtmp1 [i] [n]相当于rtmp1 [i * NMAX + n]
请参阅http://www.cplusplus.com/doc/tutorial/arrays/,其中您的NMAX是其宽度。
答案 1 :(得分:0)
是的,但你想通过这样做证明什么? rtmp1 [i] [n]很可能有更好的执行时间,更容易阅读。
“实际上,你想要使用rtmp [i + 3 * n]”有什么区别?您所做的只是交换地址。
答案 2 :(得分:0)
我不确定它是否会破坏别名预防规则。我的阅读是好的,但我已经错了,整个领域有时令人困惑和大胆地知道标准的不同部分中哪两个相互冲突的规则优先。
例:
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]);