1

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

这个对吗?

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;
}

请在这方面给我建议。我需要能够取回数组,以便我可以将更新后的数组传递给另一个函数来处理它。

4

3 回答 3

5

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

但以下是:

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

但是,如果像在您的示例中那样,您想要操作原始数组,而不是返回一个新数组,那么根本没有返回值并将参数作为非常量引用传递会更有意义:

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

根据经验,尽量避免使用 C 数组,而使用 C++ 标准库容器。这将使您的生活变得更加轻松。

于 2012-10-05T08:42:10.063 回答
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])

于 2012-10-05T09:31:33.587 回答
2

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

coffee* getData(*coffe);

相对

coffee getData(coffee objcf[])

最后一个甚至不返回指针。

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

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

但是,您实际上并不需要那个。当getData修改作为参数传递的数组时,这些修改也将在cf数组中,因为数组作为引用传递。

于 2012-10-05T08:42:54.360 回答