如何使函数返回多个值?

时间:2018-03-02 02:50:38

标签: c

struct r() {
    return 1, "hello";
}

int main() {

    int x;
    char y[100];
    x, y = r(); // set x to int 1, and set y to "hello"

}

反正我能做到吗?我相信这在C

中是可能的

3 个答案:

答案 0 :(得分:3)

是的,您可以使用结构执行此操作,结构可能包含任意数据字段,如以下完整程序:

#include <stdio.h>

struct tPair {int one; int two;};

struct tPair returnPair(void) {
    struct tPair plugh;
    plugh.one = 7;
    plugh.two = 42;
    return plugh;
}

int main(void) {
    struct tPair xyzzy = returnPair();
    printf("Pair is %d, %d\n", xyzzy.one, xyzzy.two);
    return 0;
}

如果你编译并运行它,你会看到:

Pair is 7, 42

答案 1 :(得分:2)

函数不能返回多个值。

但是,您可以传递指针,以便函数通过数据写入数据 指针:

void foo(int *x, int *y)
{
    *x = 1;
    *y = 2;
}

void bar(void)
{
    int a, b;

    foo(&a, &b);

    printf("a: %d, b: %d\n", a, b); // prints a: 1, b: 2
}

另一种选择是创建一个结构并返回该结构:

struct answer {
    int x;
    int y;
};

struct answer foo(void)
{
    struct answer a;
    a.x = 1;
    a.y = -4;

    return a;
}

void bar(void)
{
    struct answer p = foo();

    printf("p.x: %d, p.y: %d\n", p.x, p.y);
}

答案 2 :(得分:2)

你必须使用struct,同时我建议你买一本书

#include <stdio.h>

struct Return_Value {
  int x;
  char *y;
};

typedef struct Return_Value Return_Value_t;


Return_Value_t r() {
  Return_Value_t revals = { .x = 1, .y = "hello" };
  return revals;
}


int main() {
  int x;
  char y[100];
  Return_Value_t reval = r();
  printf("%d\n", reval.x);
  printf("%s\n", reval.y);
}