2012-01-10 106 views
1

我正在尋找如何將一個字符串/數組傳遞給一個函數,我試圖通過價值傳遞,但它似乎並沒有工作,我看網上看到的參考,但似乎並不工作。如何通過引用將數組傳遞給函數?

誰能幫助?

+0

可能你可能展示的例如,即時通訊相當新的C + +它有助於看到實踐中的代碼,如果它不是太麻煩?謝謝 – nullVoid 2012-01-10 23:14:38

+0

簡單:'void f(std :: array &par)'爲一個數組(或者對於動態數組使用'std :: vector '),'void f(std :: string&par)'爲一個字符串。但爲什麼不顯示一些關於你想要做什麼的代碼? – Grizzly 2012-01-10 23:15:20

回答

3

您聲明函數,通過引用,採用10個整數數組是這樣的:

void f(int (&arr)[10]); 

你這樣稱呼它

int arr[10]; 
f(arr); 

您可以模板化的功能

template<class T, int N> 
void f(T (&arr)[N]); 
+0

我傳遞的字符串是從文件讀入的,所以它沒有靜態的元素大小,無論如何我可以解決這個問題?謝謝 – nullVoid 2012-01-10 23:08:35

+1

@ user1141945:不,沒有。 C++中的數組類型必須在編譯時指定其大小。動態「數組」實際上是指針,而不是數組。 – 2012-01-10 23:14:55

+0

不是數組通過引用傳遞嗎? 'void f(int(&arr)[10]);'和'void f(int arr [10]);'? – 2012-01-11 01:31:43

0

如果你正在使用可變大小的數組,你應該使用類似這樣的東西:

void someFunc(char* szString, int cbChars) 
{ 
    for (int nChar == 0; nChar < cbChars; nChar++) 
    { // Do something with the char array 
     szString[nChar] = 'A'; // Convert string to "AAAAAA..." 
    { 
} 

void callerFunc() 
{ 
    char szString[255]; 
    // read file... 
    // put file contents in szString 
    // and call the above function passing the string 'by reference' 
    someFunc(szString, 255); 
} 

也就是說,只傳遞一個指向數組的指針(它必須是相同的類型)和它的大小(這樣你就知道在哪裏停止並避免異常)。

您可以爲任何數據類型的任何陣列做同樣的,有指針上一個很好的教程:http://www.cplusplus.com/doc/tutorial/pointers/

0

如果你使用的是最新的編譯器像最近的海灣合作委員會和Visual Studio(提供C++ 11個容器),你可以用一個std :: array來代替原始數組,並且在閱讀時更加清楚。

這裏是阿爾欽Tsirunyan答案與標準::數組:

void f(std::array<int,10> & arr); 

你這樣稱呼它

std::array<int,10> arr; 
f(arr); 

您可以模板化的功能

template<class T, int N> 
void f(std::array<T,N> & arr); 
相關問題