【问题标题】:Return two values from a function? [duplicate]从函数返回两个值? [复制]
【发布时间】:2011-06-13 16:15:48
【问题描述】:

可能重复:
returning multiple values from a function

我有一个练习,它说我必须创建一个函数,该函数将通过适当的诱导读取球击中地面的高度和次数。

函数如何返回两个值?它不是只返回一个吗?它会返回什么?

float insert(int h,int n)
{
   printf ("Give a value for height and number of hits");
   scanf ("%d %d",&h,&n);
   return
}

【问题讨论】:

    标签: c


    【解决方案1】:

    顺便说一句,你给出的函数没有返回任何错误。

    一个函数只能有一个返回值。如果你想返回多个值,你可以:

    1. 返回包含值的结构。
    2. 使用指针将返回值作为参数传递。

    选项 2 的示例:

    void divmod(int a, int b, int *div, int *mod)
    {
        *div = a/b;
        *mod = a%b;
    }
    

    这样调用函数:

    int div;
    int mod;
    divmod(666, 42, &div, &mod);
    

    我特意选择了一个不同的示例,因为我无法确定您想对您的 float 返回值做什么。

    【讨论】:

    • 在你写的部分 (666,42) 我可以放 %d,%d 吗?
    • 不,在我的示例中不是。我的示例演示了使用指针返回多个值。
    【解决方案2】:

    对于家庭作业,他们可能会很高兴您传递要填写的参数。

    void insert(int* h, int* n)
    {
       ...
       scanf("%d %d", h, n);
    }
    
    // called like:
    // int height, number;
    // insert(&height, &number);
    

    但是你总是会变得棘手并返回一个结构

    typedef struct
    {
      int h;
      int n;
    } S;
    
    S insert()
    {
      S s;
      ...
      scanf ("%d %d" , &s.h, &s.n);
      return s;
    }
    

    【讨论】:

    • 小心,这是 C,不是 C++,所以引用(在第一个示例中使用)不可用;你应该用指针替换它们。此外,在 C 中使用 struct 类型时,您必须始终使用 struct 关键字对其进行限定(除非您使用常见的 typedef 成语)。
    • 没错。我用 C 方式编写它,然后想我应该改变它,因为我大部分时间都花在 C++ 方面,并且在我编写普通的旧 C 代码时通常会被骂。我把这次过滤的标签搞混了:)
    • 我对其进行了编辑以展示“C 方式”如何 - 希望你不介意 :)
    • 点 (...) 应该是什么意思?
    • ... 只是我不想输入的内容(例如 printf 提示符)。
    【解决方案3】:

    您可以返回封装这两个值的struct,也可以使用函数将存储值的两个指针参数。

    typedef struct
    {
        double height;
        int hits;
    } BallParameters;
    
    
    BallParameters insert()
    {
        BallParameters ret;
        printf ("Give a value for height and number of hits");
        scanf ("%f %d",&ret.height,&ret.hits);
        return ret;
    }
    
    /* ~~~ or ~~~ */
    
    void insert(double *height, int *hits)
    {
        printf ("Give a value for height and number of hits");
        scanf ("%f %d",height,hits);
    }
    

    【讨论】:

    • 所以我只调用了void函数(我的意思是这个/*~~~或~~~ */下面的函数)就可以了?
    • 是的,将指向目标变量的指针作为参数传递。有什么不清楚的地方?
    • 你写的void函数怎么调用?
    • 想一想……毕竟这是你的功课!
    猜你喜欢
    • 2016-05-07
    • 1970-01-01
    • 2011-04-18
    • 1970-01-01
    • 2021-12-30
    • 2011-03-09
    • 2020-03-19
    • 2016-03-16
    • 2019-11-05
    相关资源
    最近更新 更多