2014-09-06 52 views

回答

16

您可以通過使用複合文字這樣做:

Result test(void) 
{ 
    return (Result) {.low = 0, .high = 100, .sum = 150}; 
} 

(){}是複合文字運營商和複合文字是C99引入的一個功能。

+0

該方法導致ram被編譯器分配來保存一個'Result'結構體,其中字段最初被複制到,然後再次被複制到'結果'結構體的調用者實例。這兩個副本和Result結構的分配是真正的RAM和CPU週期浪費。 – user3629249 2014-09-07 14:19:19

+1

@ user3629249:但這些可以進行優化,並且是ABI特定的。在Linux/x86-64上,兩個字段的'struct'通常在兩個寄存器中返回。 – 2014-09-07 14:40:49

-5
struct Result 
{ 
    int low; 
    int high; 
    int sum; 
}; 

then to create an instance of the struct 

struct Result myResult; 

Regarding your question... 

prototype for the test function 

void test(struct Result *myResult); 

invoke the function by: 

test(&myResult); 

the test function: 

void test(struct Result *argResult) 
{ 
    argResult->low = 0; 
    argResult->high = 100; 
    argResult->sum = 150; 
} 
+3

Typedef'ing結構折舊?另外,'test(struct Result&myResult)' - 從什麼時候這成爲用C語言「調用函數」的一種方式? – AnT 2014-09-07 14:43:57

+0

你的權利,我會改變行來調用函數 – user3629249 2015-11-14 07:15:29

+0

我找不到原始引用typedef結構被折舊,所以我刪除了該語句 – user3629249 2015-11-14 07:23:53

相關問題