【发布时间】:2017-03-29 18:43:48
【问题描述】:
作者 (Bjarne Stroustrup) 在他的《C++ 编程语言》(第 4 版)一书中第 138 页说:
从这些类型中,我们可以使用声明符运算符构造其他类型:
§7.2 指针类型(如int∗)
§7.3 数组类型(如char[])
§7.7 引用类型(如double&和vector<int>&&)
这让我有点困惑。
我对指针、数组和引用运算符有基本的了解,并且我知道它们与内存地址有关。
但如果我有这样的代码:
#include <iostream>
#include <typeinfo>
#include <conio.h>
using namespace std;
int main()
{
float Var;
float& Var_Ref = Var;
float* Var_ptr;
Var_ptr = &Var;
cout << "\n\n Type of Var is " << typeid(Var).name();
cout << "\n\n Type of Var_ptr is " << typeid(Var).name();
cout << "\n\n Type of Var_Ref is " << typeid(Var).name();
getch();
cout << "\n\n\n";
}
输出是:
我可以看到typeid.name() 返回的是与它们相关的类型,而不是变量本身的类型。
我想:
Var_Ref 是 float& 类型(float 变量 Var 的别名)Var_ptr 是 float* 类型(指向具有 @987654337 的变量 Var 的指针@type)
特别是对于在打印时显示内存位置的整数十六进制值的指针。
问:这些是真实的数据类型吗?我错过了什么吗?
【问题讨论】:
-
您的代码中有 3 次 typeid(Var).name()。
-
我认为这是简单的印刷错误。
-
@George 在底部的那个链接中有一个使用指向双精度指针的示例,它输出
double* -
@picklechips Ah derp,感谢您指出这一点 :-) 这是对引用类型的错误假设。* 请参阅 ref
-
谢谢@TonyJ。过度聚焦。我花了 3 个小时在上面,却没有注意到我没有编辑粘贴的行。现在输出是有意义的。非常感谢。 :)。谢谢大家
标签: c++ pointers types reference