我想知道當我傳遞一個數組作爲參數時,哪一個是最好的?數組作爲參數
void function(int arr[]) {...};
或
void function(int* arr) {...};
你能告訴我你的理由嗎?你可能會提及哪本書?謝謝!
我想知道當我傳遞一個數組作爲參數時,哪一個是最好的?數組作爲參數
void function(int arr[]) {...};
或
void function(int* arr) {...};
你能告訴我你的理由嗎?你可能會提及哪本書?謝謝!
由於這個問題被標記c++,我會用也沒有。如果您使用必須使用,兩者都是等效的。
但既然你用C++,更好的方法是使用std::vector
此類任務
void function(std::vector<int> &arr) {...}
,或者,如果你不修改數組/矢量
void function(const std::vector<int> &arr) {...}
它們在語義上是相同的。
#1稍微好一些(在我看來),因爲它明確表示你正在傳遞一個數組。
他們是_syntactically_不同。它們在語義上是相同的。 – 2013-02-18 08:18:36
我必須承認,我更喜歡#2,但不是因爲它明確表示你傳遞了一個數組;我更喜歡它,因爲它明確表示你正在傳遞一個**地址** = P – WhozCraig 2013-02-18 08:36:20
傳遞一個數組作爲參數,最好的辦法居然是:
void function(type_t* array, int amountOfElts, int arrayAllocatedElts);
對於某些情況下(如通過字符串時),你可以經常跳過這兩個參數。但是它們可能有用,例如對字符串進行一些操作時,或者可以爲您節省一兩次。
在函數參數中使用[]選項在我看來令人困惑,應該避免。但我不認爲這是一個慣例。
如果你只是想傳遞任何數組(包括動態分配),它們是等價的。
如果您的功能需要一個實際的固定大小的數組,你可以這樣做:
template <size_t N>
void function(char (&str)[N]) { ... }
你問哪個選擇的
void function(int arr[]) {...};
和
void function(int* arr) {...};
後者允許你聲明指針本身爲const
,而前者只允許你聲明這些項目爲const
。然而,讀者[]
表示一個數組,而不是可能指向單個對象的指針。我個人認爲const
提供的約束比[]
提供的array'ness指示更實用。
對於更高級別的代碼,請使用std::vector
或std::array
,以較合適的爲準。
根據要提供抽象層上,你應該奧拉夫的方法什麼的STL使用到較高水平之間進行選擇:
template <class Iter>
void function(Iter first, Iter last)
{
// for example, to get size:
std::size_t size = std::distance(first, last);
// for example, to iterate:
for (Iter it = first; it != last; ++it)
{
// *it to get the value, like:
std::cout << *it << std::endl;
}
}
這樣一來,就可以使用該功能不僅爲數組,但對於各種STL類型:矢量,列表,隊列,堆棧等等。
int tab[4] = {1,2,3,4};
function(tab, tab+4);
std::vector<int> vec;
// fill vector with something
function(vec.begin(), vec.end());
當你傳遞一個數組來運行它時,它會衰減爲指向數組的第一個元素的指針。所以兩者都是相同的。 – 2013-02-18 08:24:06
在這些之外? 'void function(std :: string const&str){...};'最好。 – Johnsyweb 2013-02-18 08:34:20
推薦閱讀:http://stackoverflow.com/a/4810672/78845 – Johnsyweb 2013-02-18 08:36:31