1

可能重复:
从函数返回多个值

例如,如果您想要一个修改 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

4 回答 4

6

您可以将要修改的所有变量放在一个结构中,然后从函数中返回该结构。
由于结构可以包含任意数量的元素,因此您可以通过这种方式从函数中返回任意数量的元素。

当然,any as all 实际值在实际环境中会有限制。

于 2012-06-17T05:33:28.703 回答
1

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

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

int * function(struct a*);

int main()
{
     struct a a;
     function(&a);
     return 0;
}
于 2012-06-17T05:38:44.517 回答
0

您还可以将指针传递给函数并修改函数中的指针,但使用结构更好

于 2012-06-17T06:20:56.147 回答
0

如前所述,您可以使用结构来聚合多个值。@obounaim 的示例演示了一个采用指向此类结构的指针的函数,但也可以按值返回结构,这可能更简单且更具可读性。

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

} coord3d ;

coord3d getPosition(void);

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

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

于 2012-06-17T08:56:14.137 回答