#include<iostream>
int num[3]={66,77,88};
int main()
{
int(*pi)[3]=#
std::cout<<*pi;
}
结果是一个地址而不是一个数组。这背后的解释是什么?
不是整个数组对象?
*pi
给出数组,即int[3]
. But operator<<
for std::basic_ostream
没有采用数组的重载,但有一个overload https://en.cppreference.com/w/cpp/io/basic_ostream/operator_ltlt取指针(const void*
), then 数组到指针的衰减 https://en.cppreference.com/w/cpp/language/array#Array-to-pointer_decay发生时,转换后的指针(int*
) 指向数组的第一个元素,然后转换为const void*
,然后传递给std::cout
并打印出来。
存在从数组类型的左值和右值到指针类型的右值的隐式转换:它构造一个指向数组第一个元素的指针。每当数组出现在不需要数组但指针是的上下文中时,就会使用此转换:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)