c - 将数组作为结构访问 *

标签 c arrays memory struct

这是其中之一,我认为这应该可行,但最好检查问题。它在我的机器上编译并运行良好。

这是否保证可以达到我的预期(即允许我访问数组的前几个元素,并保证结构的布局、对齐、填充等与数组相同)?

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/

相关文章:

java - 尝试使用多个一维数组同时读取 Java 中的文件

java - 回复 : Big XML file

c - 为什么指向 int 数组的未初始化指针可以赋给变量值?

c - K&R atoi-一般内存泄漏

c - Makefile链接错误: undefined main

.net - .NET可以测试数组的等效性而不仅仅是相等的引用吗?

c - 延迟在客户区隐藏鼠标光标?

javascript - 我如何在 Zapier 触发器中对数组进行 JSON.parse?

c++ - 指定给 RtlValidateHeap 的地址无效

linux - 如何在运行 Linux 的 PowerPC CPU 上保留 RAM?