C++数组的元素在内存中的存储介绍

C++数组的元素在内存中的存储介绍

一维数组可以看作是一个线性表(有序序列),每个元素按照顺序排列在一起。例如a[5]:

二维数组可以看作是一个平面中的表格,每个元素在具体的行列位置上,每行是一个一维数组。例如a[3][4]:

三维数组可以看作是一个平面的集合,每个平面由二维数组组成。例如a[2][3][4]:

关于C++数组基础知识可见:https://blog.csdn.net/cnds123/article/details/108936055

一维数组的元素存储

对于一维数组,在内存中的排列顺序为:从数组首元素开始,依次排列每个元素,直到尾元素。 图示如下:

下面介绍多维数组元素在内存中的存储。

 在 C++ 中,多维数组元素在内存中的存储方式有按行优先和按列优先两种方式。具体是由编译器决定的,通常是按行优先的方式

多维数组在内存中有两种常见的元素布局方式:行优先(Row-major)和列优先(Column-major)。
对于二维数组,行优先和列优先的概念比较容易理解。
在行优先布局中,每一行的元素连续存储,并且下一行的元素紧随其后。
在列优先布局中,每一列的元素连续存储,并且下一列的元素紧随其后。
对于三维数组,行优先布局仍然是按照行的顺序来存储元素,只不过每个平面也按照行优先方式存储,并且平面之间按照索引顺序存储。
列优先布局同理,可以将三维数组看作是一个平面的集合,每个平面按照列优先方式存储,平面之间按照索引顺序存储。
三维及以上的数组的元素在内存中的布局,行优先(Row-major)和列优先(Column-major)只是对末尾两维(平面的两维)而言的。行优先和列优先原则只适用于末尾的两维(平面)。在内存中,多维数组都是以一维线性数组的形式存储的,因此要决定存储顺序,需要指定如何将多维数组映射到一维线性数组中。行优先和列优先原则规定了平面的两个维度的存储顺序,而其他维度的顺序通常是连续的,即按照数组定义顺序依次排列。

【对于四维数组,我们可以将它看作是一个四维空间中的数据集合。类似于三维数组,四维数组由多个三维数组组成。本文不做介绍】

下面按行优先的布局方式介绍,这是C/C++语言中常见的元素存储方式。

二维数组的元素存储图示如下:

 三维数组的元素存储图示如下:

OK!

猜你喜欢

转载自blog.csdn.net/cnds123/article/details/132183541
今日推荐