是否有任何 C 编译器具有扩展功能,可以按列优先顺序而不是标准行优先顺序存储数组?
最佳答案
简短的回答是“否”。
长答案是,以列主序存储数组会破坏数组索引操作和指针算术之间的一对一对应关系,以及将 N 维数组切片为 N-1 维数组的方式。
考虑一个按列优先顺序存储的 10x20 数组。这意味着相邻列中的单元在内存中将彼此相邻。另一方面,将指向 i, j 处数组元素的指针转换为元素指针必须如下所示:
int *p=&a[1][5];
int *q=&a[1][6];
p++;
标准要求p等于q,因为两个指针指向相邻的元素。如果数组 a 按列优先顺序存储,则这是不可能的。
在 C 语言中,您必须编写自己的一组函数才能处理此类数组。但是,如果您使用 C++ 进行编码,则可以选择实现自己的多维数组,并重载括号运算符 () 以按列优先顺序工作。
关于C 编译器中的列优先数组存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32160943/