【发布时间】:2021-12-21 04:07:25
【问题描述】:
Q1 - 由于begin(arr) 和&arr 都将返回arr 开始的十六进制指针位置,想知道以下脚本打印的数据类型的输出有什么区别?
#include <iostream>
#include <typeinfo>
#include <string>
using namespace std;
int main()
{
int arr[] = {10, 20, 30, 40, 50, 60, 77};
cout << typeid(begin(arr)).name() << " , " << typeid(&arr).name() << endl;
cout << begin(arr) << " , " << &arr << endl;
return 0;
}
输出
Pi , PA7_i
0x7ffc79a99500 , 0x7ffc79a99500
Q2 - 我们如何获得十六进制指针位置的十进制表示?
【问题讨论】:
-
&arr的类型为int (*)[7](即指向 7 个数组的指针int)。std::begin(arr)具有int *类型(即指向int的指针)。由于第一个编码为Pi,第二个编码为PA7_i,在typeid().name()(实现定义)中使用的编码中,前导P表示指针,最后一个字符i表示int和A7_表示包含 7 个元素的数组。要将指针打印为十进制,请转换为适当的整数类型并输出(例如cout << std::ptrdiff_t(begin(arr)),因为默认情况下,整数类型输出为十进制。 -
请每个问题回答一个问题。当你有两个问题时,你应该打开两个问题