1. ホーム
  2. c

[解決済み] C言語で関数から複数の値を返すにはどうすればよいですか?

2023-01-08 04:37:26

質問

結果を生成する関数がある場合、その関数は int を生成する関数があり、その結果が string の両方を関数から返すにはどうしたらよいでしょうか?

私が知る限りでは、関数名の前にある型によって決定されるように、1つのものだけを返すことができます。

どのように解決するのですか?

あなたの string が何であるかは分かりませんが、私はそれが自分自身のメモリを管理していると仮定します。

解決策は2つありますね。

1: struct で、必要な型をすべて含んでいます。

struct Tuple {
    int a;
    string b;
};

struct Tuple getPair() {
    Tuple r = { 1, getString() };
    return r;
}

void foo() {
    struct Tuple t = getPair();
}

2: ポインターを使用して値を渡す。

void getPair(int* a, string* b) {
    // Check that these are not pointing to NULL
    assert(a);
    assert(b);
    *a = 1;
    *b = getString();
}

void foo() {
    int a, b;
    getPair(&a, &b);
}

どちらを使うかは、どの意味論がより好きかという個人の好みに大きく依存します。