在ac函数中返回struct

我有类似下面的C代码:

struct MyStruct MyFunction (something here) { struct MyStruct data; //Some code here return data; } 

返回值是数据的内存块的引用还是副本? MyFunction应该返回struct MyStruct *(带有相应的内存分配)而不是struct MyStruct吗?

它会返回一份副本。 C是一种按值传递的语言。 除非您指定传递指针,否则将复制结构以进行赋值,返回语句以及用作函数参数。

在C中没有引用这样的东西。从语义上讲,你正在返回结构的副本。 但是,编译器可以对此进行优化。

您不能返回局部变量的地址,因为它在函数返回时超出范围。 你可以返回你刚刚使用malloc -ed的东西的地址,但是你需要明确某个人需要在某个时刻free该指针。

它作为副本返回。 顺便说一下,你不应该返回它的引用,因为它有自动存储持续时间(即数据驻留在堆栈上)。

我遇到了这个问题(DLL中的一个函数返回一个结构)并进行了调查。 从DLL返回结构以供可能具有不同编译器的人使用是不好的做法,因为以下内容。

这是如何工作取决于实施。 一些实现在寄存器中返回小记录,但是大多数实现获得一个不可见的额外参数,该参数指向调用者的本地帧中的结果结构。 返回时,指针用于将数据复制到调用者的本地帧中的结构。 如何传递此指针取决于实现:作为最后一个参数,作为第一个参数或作为寄存器。

正如其他人所说,返回引用并不是一个好主意,因为你返回的结构可能在你的本地框架中。 我更喜欢根本不返回这些结构的函数,但是将指针指向一个并从函数内部填充它。