功能被應用到陣列。 至於參數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'需要一個實際的數組。 –