繁体   English   中英

在ac函数中返回struct

[英]Returning struct in a c function

我有类似下面的C代码:

struct MyStruct MyFunction (something here)
{
    struct MyStruct data;

    //Some code here

    return data;
}

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM