You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言多维数组存储顺序:行/列优先?是否依赖编译器?

C语言多维数组的存储顺序:行优先还是列优先?

咱们先把核心结论说清楚:在C语言标准中,多维数组的元素存储顺序是明确规定为行优先顺序(row major order)的,这并不是由编译器决定的——所有符合C标准的编译器都必须遵循这个规则。

什么是行优先顺序?

简单来说,就是先把一行的所有元素全部存储完毕,再开始存储下一行的元素。拿二维数组举例:对于arr[row][col],内存中的存储顺序是:
arr[0][0] → arr[0][1] → ... → arr[0][col-1] → arr[1][0] → arr[1][1] → ... → arr[row-1][col-1]

结合你的示例代码分析

看你给出的两段初始化代码:

int arr[2][3]={1,2,3,4,5,6}; 
int array[3][2]={1,2,3,4,5,6}; 
  • 对于arr[2][3],按照行优先,第一行是1、2、3,第二行是4、5、6,所以内存里的元素顺序就是1,2,3,4,5,6;
  • 对于array[3][2],同样遵循行优先,第一行是1、2,第二行是3、4,第三行是5、6,内存里的元素顺序依然是1,2,3,4,5,6。

这就是为什么你打印两个数组的内存顺序时,输出结果完全一致的原因——它们都严格按照C标准要求的行优先顺序在内存中排列。

顺便提一句,像Fortran这类语言采用的是列优先顺序,但C语言从设计之初就明确了行优先的规则,不存在编译器自由选择的空间。

内容的提问来源于stack exchange,提问作者sagar singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:23:18