这是其中之一,我认为这应该可行,但最好检查问题。它在我的机器上编译并运行良好。
这是否保证可以达到我的预期(即允许我访问数组的前几个元素,并保证结构的布局、对齐、填充等与数组相同)?
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);
}
编辑:到底为什么我会想要做这样的事情?我有一个数组,我正在映射到一个文件。我将数组的第一部分视为“ header ”,它存储有关该数组的各种信息,其余部分我将其视为普通数组。如果我将结构指向数组的开头,我可以将 header 数据片段作为结构成员访问,这样可读性更强。结构中的所有成员都与数组具有相同的类型。
最佳答案
虽然我经常看到这样做,但您不能(这意味着它不合法,标准 C)对结构的二进制布局做出假设,因为它可能在字段之间有填充。
这在 comp.lang.c 常见问题解答中有解释:http://c-faq.com/struct/padding.htmls
关于c - 将数组作为结构访问 *,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4512019/