首页 > 解决方案 > C中多维数组的存储顺序

问题描述

使用 C 编译器,数组元素是按列主要顺序还是行主要顺序存储的,还是依赖于编译器?

int arr[2][3]={1,2,3,4,5,6};
int array[3][2]={1,2,3,4,5,6};

关于打印 arr 和数组输出:arr:

1 2 3
4 5 6

大批:

1 2
3 4
5 6

似乎它总是更喜欢行大订单?

标签: carraysmultidimensional-arraymemory-layout

解决方案


行主要顺序是标准规定的。

6.5.2.1p3

连续的下标运算符指定多维数组对象的一个​​元素。如果 E 是一个维度为 ixjx 的 n 维数组 (n >= 2)。. . xk,然后 E(用作左值以外)被转换为指向 (n - 1) 维数组的指针,维数为 jx 。. . xk。如果一元 * 运算符显式地或作为下标的结果隐式地应用于此指针,则结果是引用的 (n - 1) 维数组,如果用作左值以外的数组,它本身将转换为指针。由此得出,数组以行优先顺序存储(最后一个下标变化最快)

(强调我的)


推荐阅读