gpt4 book ai didi

c - 在 C 中,指向结构的指针是否总是指向它的第一个成员?

转载 作者:太空狗 更新时间:2023-10-29 16:22:12 26 4
gpt4 key购买 nike

假设我有许多 C 结构,我希望一组特定的函数对其进行操作。

我想知道以下方法是否合法:

typedef struct Base {
int exampleMember;
// ...
} Base;

typedef struct Foo {
Base base;
// ...
} Foo;

typedef struct Bar {
Base base;
// ...
} Bar;

void MethodOperatesOnBase(void *);

void MethodOperatesOnBase(void * obj)
{
Base * base = obj;
base->exampleMember++;
}

在示例中,您会注意到结构 FooBar 都以 Base 成员开头。

并且,在 MethodOperatesOnBase 中,我将 void * 参数转换为 Base *

我想将指向 Bar 的指针和指向 Foo 的指针传递给此方法,并依赖结构的第一个成员作为 Base 结构。

这是可以接受的,还是有一些(可能是特定于编译器的)问题我需要注意? (例如某种会改变结构第一个成员位置的打包/填充方案?)

最佳答案

是的,C 标准特别保证这会起作用。

(C1x §6.7.2.1.13: "A pointer to a structure object, suitably converted, points to its initial member ... and vice versa. There may be unnamed padding within as structure object, but not at its beginning.")

关于c - 在 C 中,指向结构的指针是否总是指向它的第一个成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7312555/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com