2011-09-16 245 views
0

我已經使用Google搜索並找不到答案。我想知道如何通過引用傳遞一個結構數組到一個函數。我發現如何用指針來做,但也想學習參考。這是我迄今爲止的代碼(對我來說很抱歉,我不評論我的個人實驗來學習東西)。通過引用將結構數組傳遞給函數

struct employeeType 
{ 
string firstName; 
... 
double monthlyBonus; 
}; 

void readEmpData(ifstream& infile, employeeType *emp, int length); 

我想我只是做了employeeType & EMP或employeeType & EMP [],但出現錯誤和一切我用Google搜索只是做了指針。

這裏是一個引擎收錄的全部代碼澄清我的學習實驗: http://pastebin.com/6NfZ3LC4

+0

已經在這裏回答:http://stackoverflow.com/questions/1106957/pass-array-by-reference-in-c –

+0

@丹尼爾,這可能是不同的。看起來他正在嘗試返回一個數組。 –

回答

0

我假設你想readEmpData在員工從一個文件中的陣列讀取。在這種情況下,調用者不知道有多少員工,因此數組及其長度應該是輸出參數。適當的簽名是:

void readEmpData(ifstream & infile, employeeType *& emp, int & length); 

employeeType * readEmpData(ifstream & infile, int & length); 

你也可以定義employeeType運營商<<和使用STL閱讀:

vector<employeeType> employees; 
copy(istream_iterator(file), istream_iterator(), back_inserter(employees)); 
+0

我嘗試了employeeType *&emp,並得到它的錯誤。我只是用* emp來修復它。我在嘗試了其他方法和其他人的方法以備將來參考之後對其做了註釋。 –

3

是一個固定大小的數組?如果沒有,你可以使用一個模板:

template <unsigned int N> 
void myFunction(Foo (&arr)[N]) 
{ 
    // arr[0] etc. 
} 

當然,這隻適用於編譯時數組工作:

void f() 
{ 
    Foo a[10]; 
    myFunction(a); // OK 

    Foo * b = new Foo[11]; 
    myFunction(b); // error, nonsense, b is a pointer, not an array 
} 

(如果您的數組大小相同的始終,你可以跳過模板,並把尺寸爲參數直接。需要注意的是「數組」不是一個類型在C++中,而是T[N]不同類型每個N。這就是爲什麼你不能有一個單一功能的「全陣列」 )

0

指針可以是指向單個對象或指向對象數組的指針。沒有區別。你沒有發現任何對數組的引用的原因是它通常是多餘的。

*emp將訪問單個對象或數組的第一個對象。

emp[0]與使用不同語法的*emp完全相同。他們都表現完全一樣。

emp[1]將獲得數組中的第二個對象。 C++如何知道你將數組傳遞給函數?它沒有。它期望跟蹤指針是否指向一個數組,以及數組的大小。

+0

學習多餘的東西仍然有用。永遠不知道你什麼時候會遇到一位喜歡冗餘的老闆。 –

+0

@Clayton,我沒有試圖做出價值判斷,只是說明爲什麼你沒有找到關於這個問題的很多材料。通常,當有兩種不同的做事方式時,人們會傾向於更簡單的方式,尤其是當更簡單的方式是C中的* only *方式時。 –