如何创建一个返回数组的函数

时间:2012-10-05 08:37:22

标签: c++ arrays visual-c++ c++11

我想知道如何原型化一个返回数组的函数,该数组也接受一个数组。在对数组进行原型设计之后,我该如何实现呢?

这是正确的吗?

coffee* getData(*coffe);

int main() {
    coffee cf[256];
    coffee FinalCoffee[256];
    FinalCoffee=getData(cf);
}

coffee getData(coffee objcf[]) {
    for(int i=0;i<SIZE;i++) {
        objcf[i].brand="nescafe";
    }
    return coffee;
}

Plsease就此提出建议。我需要能够返回数组,以便我可以将更新的数组传递给另一个函数来处理它。

3 个答案:

答案 0 :(得分:5)

您的代码甚至没有匹配的声明和函数定义。这不起作用。

但是以下是:

std::vector<coffee> getData(std::vector<coffee> const& objs) {
    std::vector<coffee> result;
    // Do something to fill result
    return result;
}

但是,如果在你的例子中,你想操纵原始数组,而不是返回一个新数组,那么根本没有返回值更有意义,并通过作为非const引用的参数:

void manipulateData(std::vector<coffee>& objs) {
    for (auto& obj : objs)
        obj.brand = "nescafe";
}

根据经验,尽量避免C数组支持C ++标准库容器。这将使您的生活更加轻松,很多更容易。

答案 1 :(得分:4)

您可以在C ++中执行此操作。参考救援。前面的语法难看,建议使用typedef:

#include <iostream>
using namespace std;

template<size_t N>
int (&f(int(&A)[N])) [N] {
        for(auto& i: A) i +=10;
        return A; 
} 

int main() {
        int A[3] = {1,2,3};
        auto& AA = f(A);
        for(auto i: AA)   cout << i << "\n";
}    

但正如Konrad Rudolph指出的那样,你实际上不需要从f()返回任何内容,你的数组就会被修改。而且你的功能可以简单得多:
void f(int (&A)[N])

答案 2 :(得分:2)

首先,函数头的声明(原型)和定义(实现)是不同的:

coffee* getData(*coffe);

对战

coffee getData(coffee objcf[])

最后一个甚至没有返回指针。

至于你的问题,你的原型说getData返回指针,但是你将它分配给数组。这不行。而是将FinalCoffee声明为指针:

coffee cf[256];
coffee* FinalCoffee;
FinalCoffee=getData(cf);

但是你真的不需要那样。当getData修改您作为参数传递的数组时,那些修改也将在cf数组中,因为数组作为引用传递。