我有一个必须返回两个值的函数
return(&ptr->keys[pos].value)
return Duplicate;
这里& ptr->键[pos] .value将给出地址,Duplicate是枚举值设置为2 ...如何将这两个值返回到另一个函数,insert_front是一个链接列表this& amp ; ptr-> keys [pos] .value用作链表的第一个地址。 我应该写的调用函数的原型应该是什么?
答案 0 :(得分:6)
您无法返回两个值。但是,您可以返回单个值,该值是包含两个值的结构。
答案 1 :(得分:4)
您只能从函数返回一件事。您可以创建一个包含要返回的所有内容的结构,也可以通过引用传递一些函数参数。
答案 2 :(得分:2)
罗伯特的代码是正确的。但是,您/可以/也使用没有malloc的结构,如下所示:
struct retstruct {
int a;
int b;
};
struct retstruct myfunc(void) {
struct retstruct r;
r.a = 1;
r.b = 2;
return r;
}
int main()
{
struct retstruct r;
r = myfunc();
printf("a=%d b=%d\n", r.a, r.b);
}
这通常是避免的,因为传递这样的结构通常会更加昂贵(性能方面),但如果你只需要这样的几个值,那就足够了。
答案 3 :(得分:1)
要返回两个值,您必须定义某种结构来保存这两个值,并返回该结构的一个实例。或者,您可以将一个或两个地址传递给函数,并让它在那里写入值。
答案 4 :(得分:1)
在C / C ++中,函数不能返回两个值。但是,大多数情况下,这种限制实际上是有道理的:在任何复杂的函数中,你想要更新一些数据(一堆变量,一个数组等),并返回函数的状态,即它是否成功或不。因此,一个好的做法是返回函数的状态,并使用引用(在C ++中)或指针(在C中)来修改您的参数,就像在C中的这个示例中一样:
int swap(int* a, int* b)
{
int tmp = *a;
*a = *b;
*b = tmp;
return 0;
}
当然,这个功能太简单而不能失败(有点),但你明白了:P
然后,如果你真的希望你的函数返回2个值,那么你可以使用其他回答者提出的所有技巧。
答案 5 :(得分:0)
像这样:
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;
}
答案 6 :(得分:0)
不,你不能在一个函数中有两个返回,第一个返回将退出你需要创建一个对象的函数。注意:我在很长一段时间内没有使用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
}
并在您发布的功能片段中创建链接对象之前设置所需的值,然后返回(链接对象);