结构体的结构体作为参数

struct of structs as argument

本文关键字:结构体 参数      更新时间:2023-10-16

我有一个相当大的结构,里面有其他的结构,然后我想传递这个结构的结构作为一个函数的参数。谁知道怎么做,或者可以给我一个例子,请!

struct B {
   //your struct..
};
struct A {  
    B b;
};
void foo(struct A a)
{ 
   a.b + ???....
   //you function
}

如果你的函数不需要修改结构体的任何内容,你可以像传递其他参数一样传递它:

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 );
   ....
}

如果结构类型非常大,有时也需要使用指针。

注意,只有在处理指向结构体的指针时才需要使用->操作符。在上面的结构体定义中,abc是常规结构体类型,因此我们可以用.访问它们的成员。例如,假设aStruct的定义如下:

struct aStruct {
  int ival;
  double dval;
  char name[20];
};

可以像这样通过p访问这些成员:

printf( "%dn", p->a.ival );
printf( "%fn", p->a.dval );
printf( "%sn", p->a.name );

现在,如果我们的bigStruct定义为

struct bigStruct {
  struct aStruct *a;
  ...
};

则需要对p的子节点和p->a的子节点使用->运算符:

printf( "%dn", p->a->ival );
printf( "%fn", p->a->dval );
printf( "%sn", p->a->name );

结构可以同时拥有基本类型和复杂类型作为成员。传递一个成员依次为结构的结构与传递一个只具有基本类型成员的结构没有区别。