从C或C++中的函数返回多个数据项

Bra*_*ost 8 c++ structure return

我对我的几个作业问题感到困惑...你能使用return()从函数中返回多个数据项吗?一个函数只能返回一个值,除非它是一个指向数组的指针吗?

我相信答案是函数可以通过返回结构返回多个数据项.然后,返回指向数组的指针不是唯一的方法 - 如果这是一种方式?

但似乎有很多关于这个主题的讨论,所以我想确保我至少有基本的想法是正确的:你可以使用结构返回多个数据项但使用指针(我不明白)会使用记忆更有效率.它是否正确?

KoK*_*oru 7

使用C++ 0x/C++ 11,您可以使用:

#include <string>
#include <iostream>
#include <tuple>

using namespace std;

tuple<int, unsigned, string, int> getValues()
{
    return tuple<int, unsigned, string, int>(1, 2, "3", 4);
}

int main()
{
    int a;
    unsigned b;
    string c;
    int d;

    tie(a, b, c, d) = getValues();

    cout << a << ", " << b << ", " << c << ", " << d << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

用它编译

g++ tuple_test.cpp -std=c++0x -o tuple_test
Run Code Online (Sandbox Code Playgroud)

并且,如果您运行该程序,它将输出:

1, 2, 3, 4
Run Code Online (Sandbox Code Playgroud)

但是最好使用像这样的引用(我想说):

void getValues(int& a, unsigned& b, string& c, int& d)
{
    a = 1;
    b = 2;
    c = "3";
    d = 4;
}

int main()
{
    ...
    getValues(a, b, c, d)
    ...
}
Run Code Online (Sandbox Code Playgroud)

这就是我没有仔细阅读的问题.

一个函数只能返回一个值,除非它是一个指向数组的指针吗?

是的,你只能返回1个单值,但是这个单值可以包含乘法值(struct,class,array).

您可以使用结构返回多个数据项,但使用指针(我不明白这一点)将更有效地使用内存.它是否正确?

真正.但是当你使用指针时,它取决于你如何使用它.当你动态分配它时,每个函数调用它都不会非常有效,你需要在使用后手动释放内存.当您使用全局数组/结构时,它将是高效的.但是当你多次调用函数时会给你带来问题.


Mah*_*dsi 1

那是对的。

但是,您可以通过添加通过引用传递的参数,然后将多个结果写入其中来“返回”多个项目。