2014-07-12 85 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