#include<iterator>
#include<iostream>
int a[5][4];
int main()
{
cout << *begin(a);
}
為什么這cout與begin(a)?
似乎*沒有取消參考回傳的指標begin(a)?
誰能告訴我為什么?
uj5u.com熱心網友回復:
這里*只影響指標的型別,而不影響它的數值。
std::begin(a)回傳指向a, 型別的第一個元素的int (*)[4]指標(指向 4 個整數陣列的指標)。
*std::begin(a)回傳int[4]。由于cout不能直接列印陣列,陣列隨后衰減到指向其第一個元素的指標,型別為int *,并按原樣列印。
**std::begin(a)會回傳一個int.
uj5u.com熱心網友回復:
你有一個二維陣列
int a[5][4];
它的元素依次是 型別的一維陣列int[4]。
該運算式*begin( a )產生對型別陣列的第一個元素的參考int ( & )[4]。本宣告中使用
cout << *begin(a);
運算式被隱式轉換為指向其型別的第一個元素的指標,int *并等效于&a[0][0]。
另一方面,運算式begin( a )的型別為int ( * )[4]。
整個二維陣列的地址與其第一個元素的地址重合,一維陣列又與一維陣列的第一個元素的地址重合。雖然使用的運算式有不同的型別。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/385121.html
