函数可以返回两个值吗?

可能重复:
从函数返回多个值

我有一个函数,必须返回两个值

return(&ptr->keys[pos].value) return Duplicate; 

这里&ptr-> keys [pos] .value将给出地址,Duplicate是一个枚举值设置为2 …如何将这两个值返回到另一个函数,insert_front这是一个链接列表这个&ptr-> keys [pos] .value用作链表的第一个地址。 我应该写的调用函数的原型应该是什么?

您不能返回两个值。 但是,您可以返回单个值,该值是包含两个值的结构。

你只能从一个函数返回一个东西。 您可以创建一个包含要返回的所有内容的结构,也可以通过引用传递一些函数参数。

罗伯特的代码是正确的。 但是,您/可以/也使用没有malloc的结构,如下所示:

 struct retstruct { int a; int b; }; struct retstruct myfunc(void) { struct retstruct r; ra = 1; rb = 2; return r; } int main() { struct retstruct r; r = myfunc(); printf("a=%db=%d\n", ra, rb); } 

这通常是避免的,因为传递这样的结构通常会更昂贵(性能方面),但如果你只需要这样的几个值,它就足够了。

要返回两个值,您必须定义某种结构来保存这两个值,并返回该结构的实例。 或者,您可以将一个或两个地址传递给该函数,并让它在那里写入值。

在C / C ++中,函数不能返回两个值。 但是,大多数情况下,这种限制实际上是有道理的:在任何复杂的函数中,你想要更新一些数据(一堆变量,一个数组等),并返回函数的状态,即它是否成功或不。 因此,一个好的做法是返回函数的状态,并使用引用(在C ++中)或指针(在C中)来修改您的参数,就像在C中的这个示例中一样:

 int swap(int* a, int* b) { int tmp = *a; *a = *b; *b = tmp; return 0; } 

当然,这个function太简单而不能失败(有点),但你明白了:P

然后,如果你真的希望你的函数返回2个值,那么你可以使用其他答案者提出的所有技巧。

不,你不能在一个函数中有两个返回,第一个返回将退出你需要创建一个对象的函数。 注意:我在很长一段时间内没有使用C编码,因此这里的语法可能已关闭。

 public class link{ private int& ptr; private int Duplicate; public constructor link() {} public setPtr(int& ptr) { this->&ptr = ptr; } //set duplicate function //get ptr function //get duplicate function } 

并在你发布的function片段中创建链接对象之前设置所需的值,然后返回(link object);

像这样:

 typedef ret { int val1; int *val2; } ret_t ; // make sure to remember to free the struct when you're done with it ret_t *myFunc( void ) { ret_t *r = malloc( sizeof(ret_t) ); r->val1 = 1; r->val2 = &r.val1; return r; } // You can also return a copy of the struct on the stack ret_t myFunc( void ) { ret_t r; r.val1 = 1; r.val2 = &r.val1; return r; }