2014-02-18 57 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”,而另一个具有实际返回值。 –