如何从C中的函数返回多个值?
如果我有一个函数产生一个结果int
和一个结果string
,我怎么从一个函数返回它们呢?
据我可以告诉我只能返回一个东西,由函数名称前面的types确定。
我不知道你的string
是什么,但我会假设它pipe理自己的记忆。
你有两个解决scheme:
1:返回一个包含你需要的所有types的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); }
您select使用哪一个取决于您喜欢的任何语义更多的个人偏好。
Option 1
:用int和string声明一个结构并返回一个结构体variables。
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(param,"...."); *param2 = /* some calculated value */ }
两种不同的方法:
- 通过指针传递返回值,并在函数内修改它们。 你把你的函数声明为void,但是通过传入的值作为指针返回。
- 定义一个结合你的返回值的结构。
我认为#1对于发生的事情更为明显,但如果返回值太多,可能会变得乏味。 在这种情况下,选项#2工作得相当好,尽pipe为此目的制作专门的结构需要一些精神上的开销。
由于你的结果types之一是一个string(而你使用的是C,而不是C ++),所以我build议把指针作为输出parameter passing。 使用:
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);
一般来说,更喜欢在调用函数中进行分配,而不是在函数本身内部进行分配,这样就可以尽可能地为不同的分配策略开放。
创build一个结构并在其中设置两个值并返回结构variables。
struct result { int a; char *string; }
您必须为程序中的char *
分配空间。
使用指针作为你的函数参数。 然后使用它们来返回多个值。
通过引用parameter passing参数。
例子:
void incInt(int *y) { (*y)++; // Increase the value of 'x', in main, by one. }
也使用全局variables,但不build议。
例:
int a=0; void main(void) { //Anything you want to code. }
嘿,我相信你可以返回2值与指针在C的帮助。