Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;:二维阵列与一维阵列的差异_C++_Arrays_Multidimensional Array - Fatal编程技术网

C++ C++;:二维阵列与一维阵列的差异

C++ C++;:二维阵列与一维阵列的差异,c++,arrays,multidimensional-array,C++,Arrays,Multidimensional Array,我有一个浮点rtmp1[NMAX*3][3]数组,它用作rtmp1[I][n],其中n是从0到2,I是从0到3*NMAX-1。但是,我想将rtmp1转换为rtmp1[3*3*NMAX]。将这个新的1D阵列寻址为rtmp1[3*i+n]是否等同于rtmp1[i][n]?提前感谢您的澄清。是的,但您这样做是为了证明什么?rtmp1[i][n]很可能具有更好的执行时间,并且更易于阅读 “实际上,您希望使用rtmp[i+3*n]”有什么区别?您所做的只是交换地址。我不确定它是否会违反一些别名预防规则。我

我有一个浮点rtmp1[NMAX*3][3]数组,它用作rtmp1[I][n],其中n是从0到2,I是从0到3*NMAX-1。但是,我想将rtmp1转换为rtmp1[3*3*NMAX]。将这个新的1D阵列寻址为rtmp1[3*i+n]是否等同于rtmp1[i][n]?提前感谢您的澄清。

是的,但您这样做是为了证明什么?rtmp1[i][n]很可能具有更好的执行时间,并且更易于阅读


“实际上,您希望使用rtmp[i+3*n]”有什么区别?您所做的只是交换地址。

我不确定它是否会违反一些别名预防规则。我的理解是,这是可以的,但我已经错了,整个领域有时令人困惑和大胆,因为要知道标准不同部分的两条冲突规则中哪一条优先

例如:

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;
}


rtmp1[i][n]相当于rtmp1[i*NMAX+n]


请看,其中的NMAX是它们的宽度。

我是否应该从0到(3*NMAX)-1?请澄清。你的意思是“我是从0到2”还是rtmp1[3*4*NMAX]?@KTC:是的,我已经更正了@bill weaver:请澄清你的问题。我认为你基本问题的答案是肯定的(见下面我的答案)。然而,我对你问题第一部分的范围感到困惑。在您编辑之后,我对它们更困惑了。我正在尝试将rtmp1动态分配为1D数组,因为直到运行时我才知道它的大小。NMAX是一个需要静态分配的非常大的数字,当前的实现在内存消耗方面非常贫乏。我尝试做的主要目标是将2D数组转换为伪2D数组。我接受你的答案。谢谢
// context which give a problem if I'm wrong.
float rtmp1[NMAX*3][3];
float *ptr = &rtmpl[0][0];
f(ptr, rtmpl[1]);