对输出感到困惑。返回两个变量并仍然打印

时间:2017-11-01 20:47:34

标签: c function variables printing return

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".

我认为从函数中返回两个变量是不可能的。编译器如何知道打印ll而不是kk?我知道在函数ii=3jj=4k=7l=12中,但它会继续返回两个变量。有人可以详细说明它最终打印的原因:

12, 12

1 个答案:

答案 0 :(得分: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);           

该函数只返回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);
}