是否有任何C编译器具有扩展以按列主要顺序存储数组而不是标准行主要顺序?
答案 0 :(得分:4)
简短回答是“不”。
很长的答案是以列主顺序存储数组会破坏数组索引操作和指针算术之间的一对一对应关系,以及将N维数组切成N-1维数组的方式。 / p>
考虑以列主要顺序存储的10x20阵列。这意味着相邻列中的单元格在内存中彼此相邻。另一方面,将指向i,j的数组元素的指针转换为元素指针必须如下:
int *p=&a[1][5];
int *q=&a[1][6];
p++;
标准要求p等于q,因为两个指针指向相邻元素。如果数组a以列主要顺序存储,那么这是不可能的。
在C中,您必须编写自己的一组函数来处理此类数组。但是,如果使用C ++编写代码,则可以选择实现自己的多维数组,并重载括号operator()以按列主顺序工作。