【问题标题】:Output is not what I had expected from the code输出不是我对代码的期望
【发布时间】:2022-01-01 06:18:55
【问题描述】:

请解释一下为什么这个程序输出的是12 12,而不是7 7

#include <stdio.h>
int addmult(int ii, int jj){
    int kk, ll;
    kk = ii + jj;
    ll = ii * jj;
    return(kk,ll);
}

int main(void) {
    int i = 3, j = 4, k, l;
    k = addmult(i,j);
    l = addmult(i,j);
    printf("\n%d\n%d",k,l);
}

【问题讨论】:

  • return(kk,ll) 这应该做什么? (在 C 中返回 ll

标签: c


【解决方案1】:

C 不允许从同一个函数返回多个值。您可以创建一个在函数内部保存 2 个值的结构并将其返回,但更好的方法是每次只调用一次函数。

【讨论】:

    【解决方案2】:
    k,ll
    

    是逗号运算符。 C 标准说:

    逗号运算符的左操作数被评估为 void 表达式;有一个 其求值与右操作数求值之间的序列点。那么右边 评估操作数;结果有它的类型和值。

    所以

    return(kk,ll);
    

    相同
    return ll;
    

    代码可以简化为

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

    这很明显它会为两个调用返回 12。

    【讨论】:

      【解决方案3】:

      正如其他人在上面已经回答的那样,C 语言不允许从函数返回多个值(它们仅限于 Python 等语言)。

      以下是如何在 C 中使用 struct 实现您想要的目的

      #include <stdio.h>
      
      struct Pair {
          int x;
          int y;
      };
      
      struct Pair addmult(int ii, int jj){
          int kk, ll;
          kk = ii + jj;
          ll = ii * jj;
      
          struct Pair p = {kk, ll};
          return p;
      }
      
      int main(){
      
          int i = 3, j = 4, k, l;
          struct Pair p = addmult(i, j);
          k = p.x;
          l = p.y;
          printf("\n%d\n%d\n",k,l);
      
          return 0;
      }
      

      【讨论】:

        猜你喜欢
        • 2023-02-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-25
        • 2020-07-27
        • 2020-03-04
        • 1970-01-01
        相关资源
        最近更新 更多