C 编译器中的列优先数组存储

Column-major array storage in C compilers

是否有任何 C 编译器具有以列优先顺序而不是标准行优先顺序存储数组的扩展?

简答为 "No"。

长答案是,以列优先顺序存储数组会破坏数组索引操作和指针算法之间的一一对应关系,以及将 N 维数组切片为 N-1 维数组的方式.

考虑以列优先顺序存储的 10x20 数组。这意味着相邻列中的单元格在内存中将彼此相邻。另一方面,将指向数组元素 i、j 的指针转换为元素指针必须像这样工作:

int *p=&a[1][5];
int *q=&a[1][6];
p++;

标准要求p等于q,因为两个指针指向相邻的元素。如果数组 a 以列优先顺序存储,这是不可能的。

在 C 中,您必须编写自己的一组函数才能使用此类数组。但是,如果您使用 C++ 编写代码,则可以选择实现自己的多维数组,并重载括号运算符 () 以按列优先顺序工作。