这个技巧会在C中发挥作用吗?

pyt*_*nic 2 c

我想在C中的结构中添加一个字段.例如,我有以下结构.

struct A
{
 some_type x;
 some_type y;
}
Run Code Online (Sandbox Code Playgroud)

我声明了一个像这样的新结构.

struct B
{
 A a;
 some_type z;
}
Run Code Online (Sandbox Code Playgroud)

现在说我有这样的功能.

int some_function( A * a )
Run Code Online (Sandbox Code Playgroud)

是否可以在程序中将类型B的变量传递给它.

B * b;
......
A * a = (A*)b;
some_function( a );
Run Code Online (Sandbox Code Playgroud)

并且还可以some_function使用a->x例如内部的字段?

jpa*_*cek 9

是的,它是有效的.标准的话,C99 6.7.2.1/13:

...指向适当转换的结构对象的指针指向其初始成员(或者如果该成员是位字段,则指向它所在的单元),反之亦然.结构对象中可能存在未命名的填充,但不是在其开头.