C++11 关于 *begin(a)

标签 c++ arrays c++11

#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/

相关文章:

javascript - 在javascript中使用json数组搜索过滤器

c++ - 用 "pure"C++11 替代方案替换 BGL 遍历顶点?

c++ - "virtual"模板方法

Javascript/Webix 将对象引用为数组

c++ - 搜索具有最小矩形长度和的一组点。算法是什么?

arrays - 如何索引汇编中的字符串

c++ - 我应该如何用 * 框内的大写字母打印 HI?

c++ - 嵌套函数的线程安全和唯一执行

c++ - 多个 C++ 文件和变量范围

c++ - 使用 C++ 调用不正常地重新启动 Mac OS X?