为什么指向引用的指针在C++;? 标题本身提到的,为什么指针指向引用是非法的,而C++中的反向是合法的?< P>指针需要指向一个对象。引用不是对象

为什么指向引用的指针在C++;? 标题本身提到的,为什么指针指向引用是非法的,而C++中的反向是合法的?< P>指针需要指向一个对象。引用不是对象,c++,pointers,reference,C++,Pointers,Reference,如果您有一个引用r,一旦它被初始化,无论何时使用r,您实际上都在使用引用引用的对象 因此,您首先不能获取引用的地址以获得指向它的指针。考虑下面的代码: int x; int& rx = x; int* px = &rx; 在最后一行,&rx获取了rx引用的对象的地址,因此它与您所说的&x完全相同,因为引用不是可以指向的对象,而这又是因为它实际上不必在内存中的任何位置表示。引用的存在为已经存在的事物提供了替代名称。您可以获得指向重命名对象的指针,但这是指向值的指针,而不是指向引

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

因此,您首先不能获取引用的地址以获得指向它的指针。考虑下面的代码:

int x;
int& rx = x;

int* px = &rx;

在最后一行,
&rx
获取了
rx
引用的对象的地址,因此它与您所说的
&x
完全相同,因为引用不是可以指向的对象,而这又是因为它实际上不必在内存中的任何位置表示。引用的存在为已经存在的事物提供了替代名称。您可以获得指向重命名对象的指针,但这是指向值的指针,而不是指向引用的指针。

指向引用(指向对象)的指针和指向实际对象的指针有什么区别?无法将引用更改为引用其他对象。只需使用一个常规指针指向所讨论的对象


另一方面,对指针的引用与任何其他引用一样,为特定变量提供了可修改的句柄。在本例中,它恰好是一个指针。

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


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

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

看来有人把我的话当真了。。。。这很好:DAnyway,好问题+1。连我都想知道理由@纳瓦兹:你的猜测是正确的。@Nawaz:8.3.2/3
未指定引用是否需要存储
@Prasoon Saurav:在我的标准副本中,8.3.2/5明确表示
不应引用引用,不应使用引用数组,而且没有指向引用的指针
@Nawaz:显然,我们对“一般情况下”的含义有不同的理解。该标准确实指出,未明确引用是否占用存储空间。这意味着可以说“在一般情况下,引用不占用存储空间”和“在一般情况下,引用占用存储空间”。这两种说法都是正确的。您只需使用与您的特定上下文相关的内容即可。@AndreyT:您可以说“不是所有的孩子都好”和“不是所有的孩子都淘气”。。。。尝试使用“一般”在这里。。。“一般来说,穆斯林是恐怖分子”。。“一般来说,穆斯林不是恐怖分子”。。。“总的来说,印度人是白痴”和“总的来说,印度人不是白痴”…“总的来说,你错了”和“总的来说,你没有错”。。。这些说法相互矛盾。句号@AndreyT:您说过“一般情况下,引用不会占用内存,正如语言规范中明确规定的那样。”。。。这是相当误导的。如果它在这里有意义,那么它在任何地方都应该有意义,只要规范使用术语“unspecified”。。。。。我重复一下规范中说的“未指明引用是否需要存储”,这不能转化为“一般来说,引用不占用内存”。这是迄今为止最相关的答案。既然不可能获取引用的地址,那么有一个指向它的指针又有什么意义呢?您可以初始化此类指针的唯一值为NULL。这一行的+0.5“您不能获取引用的地址,以便能够首先获取指向它的指针。”…而这一行的+0.5“&rx获取rx引用的对象的地址,因此它与您所说的&x完全相同。”。。。。漂亮的解释!谢谢你。我需要完全按照你说的做-通过引用获取指向原始对象的指针。int*&X是合法的,这个int&*X是不合法的