【问题标题】:struct of structs as argument结构的结构作为参数
【发布时间】:2013-03-13 13:18:21
【问题描述】:

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

【问题讨论】:

  • 下定决心,是 C 还是 C++。
  • 只是通过了吗?它应该可以正常工作。
  • 结构内容无关。您只需传递一个结构,然后在您的函数中访问结构中的结构。
  • 如果我理解正确,一个例子在stackoverflow.com/questions/12694902/…
  • 如果 c++ 是一个选项,请考虑使用类和继承。

标签: c++ c function struct arguments


【解决方案1】:
struct B {
   //your struct..
};
struct A {  
    B b;
};

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

【讨论】:

  • @icepack 按值传递数据?特别是如果它是一个大型数据结构?
【解决方案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 );
   ....
}

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

请注意,在处理指向结构的指针时,您只需要使用-> 运算符。在上面的结构体定义中,abc 是常规结构体类型,因此我们将使用. 访问它们的成员。例如,假设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 );

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-15
      • 2014-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多