我想知道如何原型化一个返回数组的函数,该数组也接受一个数组。在对数组进行原型设计之后,我该如何实现呢?
这是正确的吗?
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就此提出建议。我需要能够返回数组,以便我可以将更新的数组传递给另一个函数来处理它。
答案 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
数组中,因为数组作为引用传递。