从包含C中的静态数组的函数返回结构

时间:2011-01-28 13:35:03

标签: c

struct MyStruct
{
  int i; 
  double arr[10];

};


struct MyStruct func()
{


};

从函数返回时,会完全复制到局部变量吗?

struct Mystruct ms = func();

4 个答案:

答案 0 :(得分:5)

是的,你可以,结构将被完全复制。

答案 1 :(得分:0)

是的,如果func()返回Mystruct类型的变量。

答案 2 :(得分:0)

正确的方法:

void func(struct MyStruct* by_ref);

int main()
    {
      struct MyStruct ms;
      func(&ms);
    }

这不会在堆栈上传一个夸张的结构,也不会出现静态变量的问题。由于以下原因,返回指向静态变量的指针非常糟糕:

  1. 它破坏了私人的包容。非常糟糕的程序设计。
  2. 执行此操作的多线程程序容易受到攻击。
  3. 纯粹的错误,如本例所示:
  4. static uint8 static_str[6];
    
    uint8* func(const uint8 str[6])
    {
      uint8 i;
    
      for(i=0; i<6; i++)
      {
        static_str[i] = str[i];
      }
    
      return static_str;
    }
    
    int main()
    {
      print_strings(func(“hello”), func(“world”));
    }
    

    打印两个字符串的函数的输出将是“hello hello”或“world world”(取决于函数参数的评估顺序)。

答案 3 :(得分:-1)

您没有返回值,因此无论如何您需要设置它。此外,最好使用指针:

struct MyStruct* func()
{
     struct MyStruct *pMyStruct=calloc(1,sizeof(struct MyStruct));

     /* fill struct */


     return pMyStruct; 
};