這是其中之一我認爲這應該工作,但最好檢查問題。它在我的機器上編譯和正常工作。作爲一個結構訪問數組*
這是保證做我所期望的(即允許我訪問數組的前幾個元素,保證結構的佈局,對齊,填充等與數組相同)?
struct thingStruct
{
int a;
int b;
int c;
};
void f()
{
int thingsArray[5];
struct thingStruct *thingsStruct = (struct thingStruct *)&thingsArray[0];
thingsArray[0] = 100;
thingsArray[1] = 200;
thingsArray[2] = 300;
printf("%d", thingsStruct->a);
printf("%d", thingsStruct->b);
printf("%d", thingsStruct->c);
}
編輯:爲什麼地球上我會想要做這樣的事情?我有一個數組,我正在映射到一個文件。我將數組的第一部分視爲「標題」,它存儲有關數組的各種信息,其餘部分我將其視爲一個普通數組。如果我將結構指向數組的開始,我可以以結構成員的形式訪問這些頭部數據,這些結構更具可讀性。結構中的所有成員將與數組的類型相同。
我認爲**只要您使用`#pragma`或其他東西來禁用結構上的填充。 – 2010-12-22 17:48:27
請注意,您可以通過在結束定義的大括號後面添加__attribute __(packed)來完成GCC。 – 2010-12-22 18:23:09
對於Windows編譯器(也受GCC支持),我相信你可以在結構定義之前使用`#pragma pack(0)`,之後使用`#pragma pack()`。 – 2010-12-22 18:23:53