如何从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 */ } 

两种不同的方法:

  1. 通过指针传递返回值,并在函数内修改它们。 你把你的函数声明为void,但是通过传入的值作为指针返回。
  2. 定义一个结合你的返回值的结构。

我认为#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的帮助。