2012-10-05 104 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])

相關問題