C ++指针和引用数据类型

时间:2017-03-29 18:43:49

标签: c++ pointers types reference

在他的书“The C ++ Programming Language”(第4版)中,作者(Bjarne Stroustrup)在第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";
} 

输出是:

Output

我可以看到typeid.name()返回与它们相关的类型而不是变量本身的类型。

我想:

Var_Ref的类型为float&float变量Var的别名) Var_ptr的类型为float*(指向变量Var的指针,其类型为float

特别是对于打印时显示内存位置的整数十六进制值的指针。

:这些是真正的数据类型吗?我错过了什么吗?

1 个答案:

答案 0 :(得分:2)

不,这些仍然是真实的数据类型。

指针指向内存中的地址空间。例如,

int test = 5;
int *foo = &test;

&安培;将获得测试所在的地址。 * foo只是声明foo将存储地址。

考虑到这一点,foo不会= 5.而是一些十六进制地址,例如0xA000125BFFFFFF或类似的东西。

如果这有帮助,有些人喜欢写:

int* foo

所以你可以把它想象成一个名为foo的int指针。

但是,有一点需要指出的是,所有这些都是int类型。这将适用于另一种数据类型,例如float或double或其他一些自定义类型。

然而,有一点需要注意的是,你不能这样做:

double test = 5.02;
int *foo = &test;