2017-11-01 3 views
-1
int addmult(int ii, int jj){ 
    int kk, ll; 
    kk = ii + jj; 
    ll = ii * jj; 
    return (kk, ll); 
} 
void main(void){ 
    int i=3, j=4, k, l; 
    k = addmult(i, j); 
    l = addmult(i, j); 
    printf("%d, %d\n", k, l); 
} 

The code prints "12, 12".は出力に混乱します。 2つの変数を返すと、まだ私は機能から2つの変数を返すことができなかったと考え

印刷します。コンパイラはkkの代わりにllをどのように印刷することを知っていますか?私は関数ii=3jj=4k=7l=12でそれが分かっていますが、2つの変数を返すことになります。印刷誰かがそれが終わる理由について詳しく説明してもらえ:関数は、2つの値を返すされていない

12, 12 

答えて

1

、あなたはComma operatorにつまずいてきました。

/** 
* Assigns value of b into i. 
* Results: a=1, b=2, c=3, i=2 
*/ 
int a=1, b=2, c=3;    
int i = (a, b);   

機能はちょうどあなたが2つの値を返すために参照パラメータを使用したい、llの値を返しています。

void addmult(int ii, int jj, int* kk,int* ll){ 
    *kk = ii + jj; 
    *ll = ii * jj; 
} 
void main(void){ 
    int i=3, j=4, k, l; 
    addmult(i, j, &k, &l); 
    printf("%d, %d\n", k, l); 
} 
+0

これはCですか? –

+0

wooops申し訳ありませんが、ポインタで渡す必要があります。 – undeadherbs

+0

@undeadherbsありがとうございます!私はあなたが両方の値を返すために参照パラメータを使用できることを知りませんでした。私はあなたの答えを確認するだろうが、サイトはカンマ上の質問に私をリダイレクトしました...あなたに答えるためにありがとう! – Alex

関連する問題