2012-10-05 101 views
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; 
} 

这个问题请教我。我需要能够取回数组,以便我可以将更新的数组传递给另一个函数来处理它。

回答

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

在上述例子中,OP似乎要处理的阵列,人们不禁要问,如果他真的需要在所有返回一个新的,但实际上修改原来的。 – Benj

+0

在早期的情况下,如何做de protoyting和向量的实现 – rasul1719435

+0

@ rasul1719435原型与函数头相同。没什么可改变的。 –

2

要开始使用该函数头,声明(原型)和定义(实现)是不同的:

coffee* getData(*coffe); 

对战

coffee getData(coffee objcf[]) 

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

至于你的问题,你的原型说,getData返回指针但你把它分配给阵列。这不起作用。相反,声明FinalCoffee为指针:

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

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

+0

所以我可以这样键入 void getData(* coffee);这是原型 void getData(coffee cf []){ } int main(){ coffee cf [256]; getData(cf); } – rasul1719435

+0

@ rasul1719435是的,这是正确的。但要确保原型和实际的实现匹配! –

+0

void getData(* coffee); \\原型 void getData(coffee cf []){} \\ implementation 它们是否对齐 – rasul1719435

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

但作为,康拉德·鲁道夫指出,你其实并不需要返回根据f什么(),数组中的地方进行修改。和你的函数可以简单得多:
void f(int (&A)[N])

相关问题