这是其中之一我认为这应该有效,但最好检查一下问题。它在我的机器上编译并运行良好。
这是否保证达到我的预期(即允许我访问数组的前几个元素,并保证结构的布局、对齐、填充等与数组相同)?
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);
}
编辑:我到底为什么要做这样的事情?我有一个数组,我正在将其映射到文件。我将数组的第一部分视为“标头”,它存储有关数组的各种信息,并将其余部分视为普通数组。如果我将结构体指向数组的开头,我可以将头数据片段作为结构体成员进行访问,这更具可读性。结构中的所有成员都与数组具有相同的类型。
虽然我经常看到这样做,但您不能(这意味着它不合法,标准 C)对结构的二进制布局做出假设,因为它可能在字段之间有填充。
comp.lang.c 常见问题解答中对此进行了解释:http://c-faq.com/struct/padding.htmls http://c-faq.com/struct/padding.htmls
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)