如果我有一个生成结果int和结果string的函数,我如何从函数中返回这两个结果?
据我所知,我只能返回一个东西,这是由函数名前面的类型决定的。
发布于 2010-04-12 14:05:59
我不知道你的string是什么,但我假设它管理着自己的内存。
您有两种解决方案:
1:返回一个包含所有需要的类型的struct。
struct Tuple {
int a;
string b;
};
struct Tuple getPair() {
Tuple r = { 1, getString() };
return r;
}
void foo() {
struct Tuple t = getPair();
}2:使用指针传出值。
void getPair(int* a, string* b) {
// Check that these are not pointing to NULL
assert(a);
assert(b);
*a = 1;
*b = getString();
}
void foo() {
int a, b;
getPair(&a, &b);
}您选择使用哪一种语义在很大程度上取决于个人偏好,即您更喜欢哪种语义。
发布于 2010-04-12 14:10:57
Option 1:声明一个带有整数和字符串的结构,并返回一个结构变量。
struct foo {
int bar1;
char bar2[MAX];
};
struct foo fun() {
struct foo fooObj;
...
return fooObj;
}Option 2:您可以通过指针传递两个参数中的一个,并通过指针更改实际参数,然后像往常一样返回另一个:
int fun(char **param) {
int bar;
...
strcpy(*param,"....");
return bar;
}或
char* fun(int *param) {
char *str = /* malloc suitably.*/
...
strcpy(str,"....");
*param = /* some value */
return str;
}Option 3:类似于选项2。可以通过指针传递,也可以不从函数返回任何内容:
void fun(char **param1,int *param2) {
strcpy(*param1,"....");
*param2 = /* some calculated value */
}发布于 2010-04-12 14:10:31
由于您的结果类型之一是字符串(并且您使用的是C,而不是C++),因此我建议将指针作为输出参数进行传递。使用:
void foo(int *a, char *s, int size);然后这样叫它:
int a;
char *s = (char *)malloc(100); /* I never know how much to allocate :) */
foo(&a, s, 100);一般来说,更喜欢在调用函数中进行分配,而不是在函数本身内部进行分配,这样您就可以尽可能地开放不同的分配策略。
https://stackoverflow.com/questions/2620146
复制相似问题