这是其中之一我认为这应该工作,但最好检查问题。它在我的机器上编译和正常工作。作为一个结构访问数组*
这是保证做我所期望的(即允许我访问数组的前几个元素,保证结构的布局,对齐,填充等与数组相同)?
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