2014-02-18 55 views
0

函數是否可以返回聯合的成員?作爲返回值的聯盟成員

如果是這樣,那麼我該如何聲明函數的返回類型以及如何在函數的定義中使用return語句?

(其實,我有一系列的關於這個問題,但他們都不是有道理的,除非前面的回答,所以這是第一個......)

+1

聯合的成員只是一個變量,就像一個結構體的成員一樣。 – Sneftel

+2

如果你的聯盟成員是一個int,你返回一個int。 – dutt

+0

抱歉,現在沒有可用的代碼。實際上,我想要一個包含兩個成員的聯合:一個是函數的「正常」返回值,另一個是函數不希望返回的值,如果函數失敗做所需的任務。例如,爲一個變量分配內存,然後該函數返回一個指向該變量的指針,否則返回false。 – user3257624

回答

5

第一個工會的成員是目的。函數只能返回值。

您可以返回一個值作爲聯合成員的值。爲此,函數的返回類型只是成員的類型。

函數可以返回整個聯合(按值)。爲此,函數的返回類型是聯合類型。

函數可以返回一些值,告訴調用者當前正在使用聯合的哪個成員(例如,第一個成員爲0,第二個成員爲1)。爲此,函數的返回類型是您選擇對信息進行編碼的某種類型(例如,int)。

函數也可以返回指針。這些通常用作對象的代理:由於不能返回實際的對象,因此返回指向對象的指針,調用者可以使用指針訪問對象。一個函數可以返回一個指向聯合成員的指針或一個指向聯合的指針。 (這可能會產生問題:指針返回的對象必須是函數返回後繼續存在的對象,因此它不能是在函數內部創建的自動對象。)

+0

我明白了。然後,我可以使用枚舉類型來檢查聯合體的標記字段,對嗎?但是,如果我想要,例如,返回「真正的」價值或無效的函數(取決於函數的參數),那麼有什麼辦法可以實現呢? – user3257624

+0

@ user32576424:要讓某個函數返回某個值* x *或無值「void」,則必須有一個可以表示所有期望值* x *和「void」的類型(例如,指針可以表示指向實際對象和NULL的指針,以及浮點值都可以表示數字和NaN [不是數字])。有時候這是通過拋開一個特殊的價值來表示「空白」來完成的。例如,如果你的函數從不返回負值以得到正確的結果,那麼-1可以代表「無效」。 –

+1

@ user3257624:如果基本類型對此不滿意,則可以使用兩個成員定義一個結構,其中一個會告訴您返回值是否爲「void」,而另一個具有實際返回值。 –