为什么当我取消引用数组指针时,结果值是指向数组第一个元素的指针,而不是整个数组对象?

air*_*air 14 c++ arrays

#include<iostream>

int num[3]={66,77,88};

int main()
{
    int(*pi)[3]=&num;
    std::cout<<*pi;
} 
Run Code Online (Sandbox Code Playgroud)

结果是地址而不是数组。这背后的解释是什么?

son*_*yao 18

不是整个数组对象?

*pi给出数组,即int[3]. 但是operator<<forstd::basic_ostream没有重载取数组但有重载取指针 ( const void*),然后发生数组到指针衰减,转换后的指针 ( int*) 指向数组的第一个元素,然后转换为const void*,然后传递到std::cout并打印出来。

存在从数组类型的左值和右值到指针类型的右值的隐式转换:它构造一个指向数组第一个元素的指针。每当数组出现在不需要数组的上下文中时,就会使用此转换,但指针是: