2016-11-14 60 views
1

我試圖使用結構來使用以下代碼返回多個變量。使用c函數返回多個變量

有沒有更好的方法來做到這一點?

和這種技術,它是有效的? PS:我是新來的嵌入式系統,所以試圖發現內存,性能和這些限制的最佳技術。

#include <stdio.h> 
struct two func(int , int); 

struct two { 
    int x; 
    int y; 

}; 

int main() { 
    printf("values is\n %i\n %i\n ",func(33,44).x,func(33,44).y); 
    return 0; 
} 


struct two func(int x, int y) { 

    struct two ex; 
    ex.x=x; 
    ex.y=y; 

    return ex; 
}; 
+3

高效?比較什麼? –

+0

從可讀性的角度來說,我會說,使用單獨的函數作爲getter/setter。 –

+1

縮進你的代碼。 –

回答

2

這是一種很好的技術,而且效率不高。 (但也有其他選擇;在Sean K的答案中提到了一個,另請參閱http://c-faq.com/misc/multretval.html。)

什麼是低效率 - 如果函數有副作用,可能是錯誤的 - 要調用它兩次以獲得它兩個值。我會使用

struct two r = func(33, 44); 
printf("values are %i %i\n", r.x, r.y); 
2

使用指針

空隙Func鍵(INT * RETURN1,INT * RETURN2)

調用時: INT的x,y; Func(& x,& y);

它也是一個通用的標準,只使用函數返回值的錯誤代碼,並且只通過指針返回值。

1

函數是一組輸入和與每個輸入涉及恰好一個輸出的屬性的一組可允許的輸出之間的關係。

- Wikipedia

所以對於一個函數的定義,有沒有可能從函數返回多個值。

您可以通過返回包含兩個值或數組的結構來克服它,但不能返回多個值。

+0

這是*數學*定義。但大量的編程語言顯式支持返回多個值。 (我想如果你想迂腐,你可以說他們返回一個值,這是一個有多個值的元組,但在我看來,這似乎是無益的分裂。) –

+0

@SteveSummit它肯定會返回一個元組。也許提供了一些自動裝箱,但它仍然是一個單一的返回值或不是一個函數。函數返回一個值。 – xenteros

+0

@SteveSummit在編程方面我們基於數學而不是哲學。如果你對設計模式迂腐,爲什麼不在這樣的基礎上?我還解釋了在C中返回多個值的機制,所以我仍然不理解你的downvote。你可能不會很迂腐,但是某個人的事實並不符合他的要求。 – xenteros