struct MyStruct
{
int i;
double arr[10];
};
struct MyStruct func()
{
};
从函数返回时,会完全复制到局部变量吗?
struct Mystruct ms = func();
答案 0 :(得分:5)
是的,你可以,结构将被完全复制。
答案 1 :(得分:0)
是的,如果func()
返回Mystruct
类型的变量。
答案 2 :(得分:0)
正确的方法:
void func(struct MyStruct* by_ref);
int main()
{
struct MyStruct ms;
func(&ms);
}
这不会在堆栈上传一个夸张的结构,也不会出现静态变量的问题。由于以下原因,返回指向静态变量的指针非常糟糕:
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;
};