C++;按内存地址将多维数组更改为一维数组 我在C++书中读到了那个 “尽管C++使我们能够对多维数组进行建模,但是数组中包含的内存是一维的,所以编译器将多维数组映射到内存空间,只扩展了一个方向。”

C++;按内存地址将多维数组更改为一维数组 我在C++书中读到了那个 “尽管C++使我们能够对多维数组进行建模,但是数组中包含的内存是一维的,所以编译器将多维数组映射到内存空间,只扩展了一个方向。”,c++,arrays,memory,C++,Arrays,Memory,我想,如果我想把n维数组改成1维数组(按升序排列),为什么我只调用n-d数组内存地址(以1-d格式存储)然后放入新的1-d数组 (通常我用于将n-d数组更改为1-d数组的语句) 有可能吗??如果可能的话,请提供简单的示例代码。指向数组中第一项的指针也是指向被视为一维数组的完整数组的指针。保证项目连续存储在内存中的保证来自于的大小要求,即n个项目数组的大小是项目大小的n倍,而且当项目本身是一个数组时。是,可以将n维数组转换为一维数组 让我以二维阵列为例说明: for (i = 0; i <

我想,如果我想把n维数组改成1维数组(按升序排列),为什么我只调用n-d数组内存地址(以1-d格式存储)然后放入新的1-d数组

(通常我用于将n-d数组更改为1-d数组的语句)


有可能吗??如果可能的话,请提供简单的示例代码。

指向数组中第一项的指针也是指向被视为一维数组的完整数组的指针。保证项目连续存储在内存中的保证来自于
的大小要求,即n个项目数组的大小是项目大小的n倍,而且当项目本身是一个数组时。

,可以将n维数组转换为一维数组

让我以二维阵列为例说明:

for (i = 0; i < n; i++)
{
    for (j = 0; j < m; j++)
    {
        b[i * n + j] = a[i][j];
    }
}
(i=0;i { 对于(j=0;j
我不认为这是OP期望的方式。你能澄清一下吗,这是我从问题中理解的。我和你一样完成了工作,但我只想使用内存地址进行更改。计算机将n-d数组像一维数组一样存储在内存空间中,我想通过引用直接调用address来使用它,并将其放入我新宣布的直接一维数组中。请参阅我对Alf答案的评论,以获取代码示例。@AbhishekKeshri OP说他/她经常使用,我想他/她只想知道第一个元素的地址。所以我认为如果不使用for语句,我认为没有真正意义上的转换。简单地说,例如,
static int arr3d[3][4][5],是否符合语言要求;int*p=(int*)arr3d;对于(int i=0;i@PeterA.Schneider:从形式上讲,不是没有很多支持性的论证,不是每个人都会相信,因为你有一个
重新解释的演员
。这个演员是完全没有必要的。你可以做
&arr3d[0][0][0]
。我明白你在说什么。例如,如果有Arr2d[2][2]那么Arr2d的地址与Arr2d[0][0]的地址相同,所以我应该通过指针递增Arr2d[0][0]来输入Arr1d[4]。我说的对吗?@taehyongkim:我想你是对的,当s/should/can/;)。@Alf嗯,我对演员阵容很有信心。如果人们只是为了获取地址而取消引用,我也会感到困扰;-)(这相当于写
p=&(***arr3d);
)——如果有什么我会写
p=arr3d[0][0]…可能重复的