为什么在C ++中指向引用的指针是非法的?

时间:2011-01-08 06:43:24

标签: c++ pointers reference

正如标题本身所提到的 - 为什么指向引用的指针是非法的,而反向在C ++中是合法的?

感谢。

5 个答案:

答案 0 :(得分:45)

指针需要指向对象。引用不是对象。

如果您有一个引用r,一旦它被初始化,每次使用r时,您实际上都在使用引用引用的对象。

因此,您无法获取引用的地址,以便能够首先获得指向它的指针。请考虑以下代码:

int x;
int& rx = x;

int* px = ℞

在最后一行中,&rx获取rx引用的对象的地址,因此它与您说&x的内容完全相同。

答案 1 :(得分:14)

引用实现的高级概念只是现有对象的另一个名称。您可以拥有指向对象(或函数)的指针,但不能指向对象的名称。出于这个原因,指向引用的指针的想法毫无意义。换句话说,引用并不重要,一般情况下它们根本就不存在于内存中。它们不存在可以指向的东西。

确实,在实践中,许多情况下引用会占用内存(并且伪装成指针实现)。但这只是特定于某些特定情境的实现细节。一般情况下,引用不占用内存,,如语言规范中明确规定的那样,紧跟语言规范。

答案 2 :(得分:4)

指向引用(指向对象)的指针和指向实际对象的指针之间的区别是什么?无法更改引用以引用其他对象。只需使用指向相关对象的常规指针。

另一方面,对指针的引用与任何其他引用一样,为您提供特定变量的可修改句柄。在这种情况下,它恰好是一个指针。

答案 3 :(得分:1)

因为引用不是可以指向的东西,而这又是因为它实际上不必在内存中的任何地方表示。存在引用以给已存在的事物提供备用名称。你可以得到一个指向重命名的东西的指针,但这是一个指向值的指针,而不是指向引用的指针。

答案 4 :(得分:0)

假设“ int *&X”是合法的,因为引用只是对象的另一个名称,所以表达式等于“ int * X”并且没有用。