函数可以在C中返回多个值吗?

时间:2012-06-17 05:31:12

标签: c function

  

可能重复:
  returning multiple values from a function

例如,如果你想要一个修改3个指针值的函数,那么你需要将双指针声明为函数参数。如果用双指针写多行,代码将很难理解;那么有什么方法可以返回多个值,例如3个输入变量和2个输出变量?

int * function(int *p,int **q,int **r)
{
  ...
  return p;
}

int main(){
  int *p,*q,*r;

  ...

  p=function(p,&q,&r);

  ...

  return 0;
}

4 个答案:

答案 0 :(得分:6)

您可以将要修改的所有变量放在结构中,并从函数中返回该结构 由于结构可以容纳任何数量的元素,因此可以通过这种方式从函数中返回任意数量的元素。

当然,任何因为所有实用价值都会在实际环境中受到限制。

答案 1 :(得分:1)

如果您要修改的元素属于同一类型,则可以使用struct作为该数组或数组:

struct a {
    int *p;
    int *p2;
    int *p3;
    double *p4;
    ...
} ;

int * function(struct a*);

int main()
{
     struct a a;
     function(&a);
     return 0;
}

答案 2 :(得分:0)

你也可以传递指向函数的指针并修改函数中的指针,但是使用结构更好

答案 3 :(得分:0)

如前所述,您可以使用结构来聚合多个值。 @ obounaim的示例演示了一个函数,它接受一个指向这种结构的指针,但是也可以通过值返回一个结构,这可能更简单,更易读。

typedef struct 
{
    int x ;
    int y ;
    int z ;

} coord3d ;

coord3d getPosition(void);

int main()
{
     coord3d pos = getPosition();
     return 0;
}

对于大型结构,这可能非常昂贵,如果结构包含指针,则结构的所有副本都将指向相同的数据,因此需要谨慎,但通常这更简单,更直观。例如,如果结构包含一些紧密内聚的数据,例如笛卡尔坐标或复数,则此方法有意义,并且在按值语义返回时几乎没有开销。