我想在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例如内部的字段?
是的,它是有效的.标准的话,C99 6.7.2.1/13:
...指向适当转换的结构对象的指针指向其初始成员(或者如果该成员是位字段,则指向它所在的单元),反之亦然.结构对象中可能存在未命名的填充,但不是在其开头.