【问题标题】:How to interpret data types obtained from <typeinfo> library?如何解释从 <typeinfo> 库获得的数据类型?
【发布时间】:2021-12-21 04:07:25
【问题描述】:

Q1 - 由于begin(arr)&amp;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 - 我们如何获得十六进制指针位置的十进制表示?

【问题讨论】:

  • &amp;arr 的类型为 int (*)[7](即指向 7 个数组的指针 int)。 std::begin(arr) 具有 int * 类型(即指向 int 的指针)。由于第一个编码为Pi,第二个编码为PA7_i,在typeid().name()(实现定义)中使用的编码中,前导P表示指针,最后一个字符i表示intA7_ 表示包含 7 个元素的数组。要将指针打印为十进制,请转换为适当的整数类型并输出(例如cout &lt;&lt; std::ptrdiff_t(begin(arr)),因为默认情况下,整数类型输出为十进制。
  • 请每个问题回答一个问题。当你有两个问题时,你应该打开两个问题

标签: c++ pointers


【解决方案1】:

对于第一季度:

请注意,begin(arr)&amp;arr 是不同的东西(具有不同的类型)。 begin(arr) 提供指向arr 的第一个元素的指针,类型为int*&amp;arr 提供指向数组arr 的指针,类型为int (*)[7]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-13
    • 1970-01-01
    • 1970-01-01
    • 2011-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    相关资源
    最近更新 更多