簡體   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