`&`,`(PTYPE)`和`(PTYPE)&`之间的区别

时间:2015-02-02 01:40:00

标签: c++

通过检查以下代码,我无法说明三种方法之间的区别,它们只返回地址(即PINT),所以我可以认为它们是相同的吗?

double *x = new double;
*x = 5.5;
cout << x << endl;
cout << &x << endl;
cout << (int*)x << endl;
cout << (int*)&x << endl;
cout << *(int*)&x << endl;
cout << *&x << endl;

如果转换为(int*)例如返回地址,则意味着使用(int*)&x等于*&x,它似乎不是因为前者给了我一个intPTR而不是一个INT

也有人可以通过简单的方式向我推荐一本涵盖指针和参考的书吗?

1 个答案:

答案 0 :(得分:1)

你问:

  

他们只是返回地址(这是一个PINT)所以我可以认为它们是一样的吗?

假设PINT typedef符合pointer to an int的某些内容,

typedef int* PINT;

cout << typeid((PINT)&x).name() << endl;
cout << typeid(&x).name() << endl;

应该打印与int*对应的打印类型信息。然而,中间线很奇怪。

cout << typeid((PINT)x).name() << endl;

无论x是什么,您都在执行编译时{@ 1}}。当然,传递给PINT的类型是typeid。这就解释了为什么你要为所有三条线获得相同的输出。

您可以使用:

PINT

并希望得到相同的答案。您正在double d; cout << typeid((PINT)d).name() << endl; 运算符上强制PINT类型。