2012-06-17 61 views
1

可能重复:
returning multiple values from a functionC函数可以返回多个值吗?

对于如果希望修改的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; 
} 
+0

您是否确实需要修改指针,或者只是指针指向的值? – plasma

+0

还有其他类似的问题可以解答吗?例如http://stackoverflow.com/questions/3829167/returning-multiple-values-from-a-function – huon

回答

6

您可以将要修改的所有变量放入结构中,并从该函数返回该结构。
由于一个结构体可以容纳任何个元素,所以可以用这种方式从函数返回任意数量的元素。

当然,任何作为所有实际值将在实际环境中有限制。

+0

谢谢!!!!! – Cristi

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; 
} 
+0

谢谢!!!!! – Cristi

0

你也可以指针传递给函数和函数修改指针,但使用的结构更好

0

如前所述,您可以使用结构来聚合多个值。 @ obounaim的例子演示了一个指向这样一个结构的函数,但是它也可以返回一个结构,它的值可以是更简单,更具可读性的值

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

} coord3d ; 

coord3d getPosition(void); 

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

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