如果您的函数不需要修改任何结构的内容,您可以像传递任何其他参数一样传递它:
struct bigStruct {
struct aStruct a;
struct anotherStruct b;
struct someOtherStruct c;
...
};
void foo( struct bigStruct s )
{
do_something_with( s.a );
do_something_else_with( s.b );
...
}
如果您需要写入结构的任何成员,您需要将 指针 传递给结构,并使用 -> 运算符访问其成员:
void bar( struct bigStruct *p )
{
do_something_with( p->a );
do_something_else_with( p->b );
....
}
如果结构类型非常很大,有时也需要使用指针。
请注意,在处理指向结构的指针时,您只需要使用-> 运算符。在上面的结构体定义中,a、b 和 c 是常规结构体类型,因此我们将使用. 访问它们的成员。例如,假设aStruct 的定义如下:
struct aStruct {
int ival;
double dval;
char name[20];
};
我们将通过p 访问这些成员,如下所示:
printf( "%d\n", p->a.ival );
printf( "%f\n", p->a.dval );
printf( "%s\n", p->a.name );
现在,如果我们的 bigStruct 被定义为
struct bigStruct {
struct aStruct *a;
...
};
那么我们需要为p 的孩子和p->a 的孩子使用-> 运算符:
printf( "%d\n", p->a->ival );
printf( "%f\n", p->a->dval );
printf( "%s\n", p->a->name );