C如何分配多维数组中的数据项的内存?
改进文章
保存文章
喜欢的文章
- 最后更新: 2022年6月3日
数据项在一个 多维数组中的数据项是以行和列的形式存储的。而且,分配给多维数组的内存是连续的。因此,多维数组中的元素可以用两种方法进行线性存储,即行-主要顺序 或列-主要顺序。
- 行的主要顺序:在行主顺序中,我们根据行来存储元素,即首先,我们将元素存储在第一行,然后是第二行,以此类推。因此,第一行的元素被线性地存储在内存中,然后是第二行,以此类推。在内存中,我们不会发现各行之间有任何分隔。
- 列为主的顺序。在存储数据项时,列主要顺序与行主要顺序相反,即在这里,我们首先将元素存储在第一列,然后是第二列,以此类推。所以在这种情况下,第一列的元素被线性地存储在内存中,然后是第二列,以此类推。
C语言 编译器使用Row major order方法来存储内存中的元素。基本上,C语言编译器将多维数组存储为单维数组,其元素为单维数组或维数比前者少1的多维数组。而这些数组对象的存储是以行为单位的。
多维数组的大小和内存分配。
多维数组中每个维度的大小都需要最初声明。然后, 多维数组的总大小是由每个维度的大小相乘而计算出来的。分配给多维数组的内存等于多维数组的大小和单个元素大小的倍数。
data_type array_name [ x1 ] [ x2 ] [ x3 ] .....[ xn ];
多维数组的大小 :- x1*x2*x3*.....*xn
其中 x1, x2, x3, ..., xn 是每个维度的大小。
分配的内存=多维数组的大小 * 单个数据类型的大小例如:-
int arr [ 3 ][ 4 ][ 2 ];
这个多维(3D)数组的大小是3*4*2 = 24
分配的内存 = 24 * 4字节 = 96字节
举例来说。
如下所示: int arr[3][3] = { {24, 15, 34}, {26, 134, 194}, {67, 23, 345}.}在内存中存储为:-
数据的分配
这里,基地址是多维数组的地址或存储在多维数组中的第一个对象的地址。内存地址增加4个字节(int数据类型的大小)。
下面是上述概念的实现。
C
// C Program to show allocation of data items// in multidimensional array#include <stdio.h>#include <stdlib.h>int main(){// Declaring the dimension of// 2-Dimension arrayint row = 3;int col = 3;// Creating an array arr with size row*colint* arr = (int*)malloc(row * col *sizeof(int));int k = 1;// Inserting values in the arrayfor (int i = 0; i < row; i++) {for (int j = 0; j < col; j++) {// The memory address of arr[i][j]// is equal to (arr + i*col + j)*(arr + i * col + j) = k;k++;}}// Printing the multidimensional arrayfor (int i = 0; i < row; i++) {for (int j = 0; j < col; j++) {printf("%d ", *(arr + i * col + j));}printf("\n");}return 0;} |
输出
1 2 3
4 5 6
7 8 9
上面的代码实现显示了元素是如何按行主顺序线性存储的。
我的个人笔记arrow_drop_up
保存