2014-07-12 51 views
0

好的,这里是代码。函数返回两个东西用逗号隔开C

#include <stdio.h> 
int addmult (int,int); 
int main (void) 
{ 
    int i=3,j=4,k,l; 
    k = addmult(i,j); 
    l = addmult(i,j); 
    printf("%d %d\n",k,l); 
    return 0; 
} 

int addmult (int ii, int jj) 
{ 
    int kk,ll; 
    kk = ii + jj; 
    ll = ii*jj; 
    return(kk,ll); 
} 

函数如何在C中同时返回两件东西?

编辑:此代码是完美的工作。我想知道,它为什么工作?

+1

改为返回一个结构或一个数组(动态分配)。 –

+3

它不返回两件事,它只是返回一件事:'ll'。 –

+4

您需要了解**逗号运算符** –

回答

2

你问什么线

return(kk,ll); 

做或如何你可能会从一个函数返回多个值吗?

要回答第一个,这个代码在功能上等同于:

int ret = (kk,ll); 
return ret; 

这可能使它更清晰一点。这是逗号运算符,其评估其第二操作数的一个实例,因此该代码是在事实上也功能上等同于:

return ll; 

是从未使用过的KK值。

为了解决你问题的第二个可能的解释:使用结构,如:

struct product_and_sum 
{ 
    int product; 
    int sum; 
}; 

更改函数返回一个struct product_and_sum,并返回一个适当初始化结构值。

+0

我明白了。 :) 我还有一个疑问。如果一个函数返回一个值,那么当它返回时是否有必要收集它的值? – user3797829

+0

@ user3797829对于没有通过'printf'函数收集返回值的例子,这不是可选的! ...另外了解'ret =(kk,ll);'和'ret = kk,ll;' –

+1

之间的区别呃,如果你能在这里简单介绍一下,有什么区别? 而且,不收集该值对于用户定义的函数来说也不够好,对吗? – user3797829