【问题标题】:Is there a way to return multiple variables from a function in C? [closed]有没有办法从 C 中的函数返回多个变量? [关闭]
【发布时间】:2016-05-09 10:42:22
【问题描述】:

在长期使用 Python 之后,我现在又回到了 C 语言。我想知道是否有一种方法可以返回 C 中多个变量的信息。我能想到的最好的方法是返回一个包含变量的结构。这是最好的方法吗?

【问题讨论】:

  • 是的,没错。否则,传递指针。
  • 你可以使用vectors
  • Python 数据结构(即列表)与 C++ 数据结构(队列、堆栈、向量)没有一一对应的关系。您必须更具体地说明您要做什么。
  • 没有“最好”的方法。您已经提到了一个解决方案,使用它。

标签: c function variables


【解决方案1】:

C 不支持允许您执行此操作的元组或类似功能。所以,很遗憾,答案是

正如您所说,您可以获得的最接近的方法是定义您自己的自定义 struct,然后可以使用它来存储您想要返回的值。

【讨论】:

  • @sjsam 是的,但由于 c 是 c++ 的子集,如果 c++ 不支持它,c 也不支持。
  • @weston :我同意,但我会在这里将它们视为单独的语言 tagssake :D
【解决方案2】:

当多个变量以某种明显的方式相互关联时,例如两个变量(x, y) 描述一个坐标、一个(firstName, lastName, address) 联系人定义等等,返回struct 的解决方案是一个很好的逻辑选择。

在您必须返回多个彼此不相关的变量的情况下,更好的方法是为结果传递指针,或者选择一个值作为“主要答案”并为其他值传递指针。

strtol 标准库中的函数是“混合”方法的一个示例:它返回解析值,并设置结束指针通过一个指针-指向它的指针。

【讨论】:

    【解决方案3】:

    您可以通过使用指针作为参数来间接做到这一点。 myDivide间接返回除法和取模的结果。

    #include <stdio.h>
    #include <stdlib.h>
    
    void myDivide(int x, int y, int* div, int* mod);
    
    int main(void) {
        int x = 100;
        int y = 42;
        int div, mod;
    
        myDivide(x, y, &div, &mod);
        printf("%d / %d = %d\n", x, y, div);
        printf("%d %% %d = %d\n", x, y, mod);
    
        return (0);
    }
    
    void myDivide(int x, int y, int* div, int* mod) {
        *div = x/y;
        *mod = x%y;
    }
    

    【讨论】:

      猜你喜欢
      • 2019-02-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-19
      • 2020-03-10
      • 2020-03-09
      • 1970-01-01
      • 2021-10-19
      • 1970-01-01
      相关资源
      最近更新 更多