我想知道当我传递一个数组作为参数时,哪一个是最好的?数组作为参数
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