0

我有一个相当大的结构,其中有其他结构,然后我想将这个结构结构作为函数的参数传递。任何人都知道该怎么做,或者请给我一个例子!

4

3 回答 3

2
struct B {
   //your struct..
};
struct A {  
    B b;
};

void foo(struct A a)
{ 
   a.b + ???....
   //you function
}
于 2013-03-13T13:20:55.693 回答
2

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

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

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

请注意,您只需要->在处理指向结构的指针时使用运算符。在我们上面的结构体定义中ab、 和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;
  ...
};

那么我们需要对of 的子级和 的子级->都使用运算符:pp->a

printf( "%d\n", p->a->ival );
printf( "%f\n", p->a->dval );
printf( "%s\n", p->a->name );
于 2013-03-13T13:45:24.870 回答
0

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

于 2013-03-13T13:23:02.353 回答