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

标签 c visual-c++ gcc clang icc

是否有任何 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/

相关文章:

c++ - 对话框背景和单选按钮透明度

c++ - MingW 环境路径

C编程: pointer to a function

c - 在 C 中打印字符串的所有排列

visual-studio - Microsoft Visual Studio : opendir() and readdir(), 怎么办?

c++ - C++ 流的flush() 和FindFirstFileEx() 之间的竞争条件

c - 多精度加法的意外表现

c - 使用 gcc 将密码字段中的字母替换为星号

c - 为什么我总是用 rand() 得到相同的随机数序列?

c++ - 是否可以列出由于潜在的混叠违规而导致的负载?