簡體   English   中英

C++11 關於 *begin(a)

[英]C++11 about *begin(a)

#include<iterator>
#include<iostream>
int a[5][4];
int main()
{
    cout << *begin(a);
}

為什么這個 cout 將打印與 begin(a) 相同的內容。
似乎 * 沒有取消引用 begin(a) 返回的指針?
誰能告訴我為什么?

這里*只影響指針的類型,而不影響它的數值。

std::begin(a)返回指向 a 的第一個元素a指針,類型為int (*)[4] (指向 4 個整數數組的指針)。

*std::begin(a)返回int[4] 由於cout不能直接打印 arrays ,因此數組會衰減到指向其第一個元素的指針,類型為int * ,並按原樣打印。

**std::begin(a)將返回一個int

你有一個二維數組

int a[5][4];

它的元素依次是int[4]類型的一維 arrays 。

表達式*begin( a )產生對int ( & )[4]類型數組的第一個元素的引用。 在本聲明中使用

 cout << *begin(a);

該表達式被隱式轉換為指向其int *類型的第一個元素的指針,等效於&a[0][0]

另一方面,表達式begin( a )的類型為int ( * )[4]

整個二維數組的地址與其第一個元素的地址一致,一維數組又與一維數組的第一個元素的地址一致。 盡管使用的表達式有不同的類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM