功能被应用到阵列。 至于参数argv
,那么它实际上有类型char **
,因为按值传递的数组被转换为指向其第一个元素的指针,并且参数也被调整为指针。
你可以写简单
#include <iostream>
#include <iterator>
int main(int argc,char *argv[])
{
auto first = arg, last = argv + argc;
}
您可以使用功能的std ::开始和std ::结束时,如果你的函数声明对应的参数作为参考阵列。例如
int MyMain(char * (&argv)[10])
{
auto first = std::begin(argv), last = std::end(argv);
}
尽管如此,它是相同的,如果写
auto first = argv, last = argv + 10;
这里是函数是如何在C++标准
template <class T, size_t N> T* begin(T (&array)[N]);
4 Returns: array.
template <class T, size_t N> T* end(T (&array)[N]);
5 Returns: array + N.
'的char * argv的[]'调整为指针,'字符** argv',它只是看起来像一个数组 –
@PiotrSkotnicki不所有数组转换为指针?是不是整个转换点,能够将“数组”传递给函数?所以I0m传递一个指向开始和结束函数的指针,它不应该工作吗? – Luca
@Luca您可以通过引用或指向数组的指针将数组传递给函数,而不是通过值。传递一个指针和一个数组是有区别的,而'std :: begin'需要一个实际的数组。 –