#include<iterator>
#include<iostream>
int a[5][4];
int main()
{
cout << *begin(a);
}
为什么这个 cout
打印的和 begin(a)
一样?
似乎 *
没有取消引用 begin(a)
返回的指针?
谁能告诉我为什么?
最佳答案
这里的*
只影响指针的类型,而不影响它的数值。
std::begin(a)
返回指向 a
的第一个元素的指针,类型为 int (*)[4]
(指向 4 个整数数组的指针)。
*std::begin(a)
返回 int[4]
。由于 cout
无法直接打印数组,因此数组会衰减到指向其第一个元素(类型为 int *
)的指针,并按原样打印。
**std::begin(a)
将返回一个 int
。
关于C++11 关于 *begin(a),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70323434/