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

構造体タイプが非常に大きい場合は、ポインターを使用することが望ましい場合もあります。

->構造体へのポインタを処理する場合にのみ演算子を使用する必要があることに注意してください。上記の構造体定義では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;
  ...
};

次に、の子と:の->子の両方に演算子を使用する必要があります。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 に答える