通过检查以下代码,我无法说明三种方法之间的区别,它们只返回地址(即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
也有人可以通过简单的方式向我推荐一本涵盖指针和参考的书吗?
答案 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
类型。