簡體   English   中英

C編譯器中的列主數組存儲

[英]Column-major array storage in C compilers

是否有C編譯器具有擴展功能,可以按列優先順序而不是標准行優先順序存儲數組?

簡短的回答是“否”。

長的答案是,以列優先順序存儲數組將破壞數組索引操作和指針算術之間的一對一對應關系,以及將N維數組切成N-1維數組的方式。

考慮以列優先順序存儲的10x20數組。 這意味着相鄰列中的單元在內存中將彼此相鄰。 另一方面,將指向i,j的數組元素的指針轉換為元素指針必須像這樣工作:

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

該標准要求p等於q,因為兩個指針指向相鄰的元素。 如果數組a以列優先順序存儲,那么這將是不可能的。

在C語言中,您必須編寫自己的函數集才能使用此類數組。 但是,如果您使用C ++編寫代碼,則可以選擇實現自己的多維數組,並使括號運算符()重載以按列為主的順序工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM