有什么办法可以find参考地址吗?
有什么办法可以find参考地址吗?
使其更具体:variables本身的地址,而不是它初始化variables的地址。
引用没有自己的地址。 尽pipe引用可以作为指针来实现,但是没有必要或者没有保证。
C ++ FAQ说得最好:
与指针不同的是,一旦引用被绑定到一个对象,它就不能被“重置”到另一个对象。 引用本身不是一个对象(它没有身份;引用的地址给出了引用的地址;记住:引用是它的引用)。
请在这里查看我的答案,了解引用与指针有什么不同 。
参考是它的指称
NO 。 没有办法获得参考地址。
那是因为一个引用不是一个对象,而是一个别名(这意味着它是对象的另一个名字)。
int x = 5; int& y = x; std::cout << &x << " : " << &y << "\n";
这将打印出相同的地址。
这是因为'y'只是对象'x'的另一个名字(别名)。
ISO标准说得最好:
应该没有对引用的引用,没有引用数组,也没有指向引用的指针。
我不喜欢很多人在这里使用的逻辑,你不能这样做,因为引用不是“保证只是一个指针的地方”。 就像int x
可能只是一个没有地址的处理器寄存器,但是当使用& x
时魔法变为一个内存位置,编译器仍然可以允许你想要的东西。
在过去,许多编译器确实允许你要求的东西,例如
int x, y; int &r = x; &r = &y; // use address as an lvalue; assign a new referent
我只是检查了一下,GCC会编译它,但是措辞强硬,而且程序坏了。
没有。
正如Bjarne Stroustrup在TC ++ PL中所说,一个引用可以被认为是现有实体(对象或函数)的另一个名称。 虽然这不一定是实现引用的底层底层机制的最精确的描述,但它是对引用打算在语言层面实现的概念的非常好的描述。 毫不奇怪,该语言没有提供获取参考地址的手段。
在语言层面,引用并不保证占用存储空间,因此一般情况下没有地址。
只需使用“&”运算符。 例如:
int x = 3; int &y = x; cout<<&y<<endl;
这将返回x的地址,因为y不过是x的地址。
从同一个问题的另一个实例:$ 8.3.2 / 3 – “没有指定参考是否需要存储(3.7)”。
所以C ++标准允许编译器/运行时实现者select一个引用是否存在于一个单独的内存位置。 但是请注意,如果它确实位于单独的内存位置,则无法以符合标准的方式find其地址。 所以不要这样做。
如果你根据C ++标准定义了一个引用的地址,那么你将得到它引用的地址,而不是引用的地址,如果事实上引用甚至作为一个单独的实体在运行时环境中存在或不。
不可靠,因为引用不必在可寻址内存中拥有唯一的位置。
不是本身。 如果你想要它的“地址”,把它放在结构体或类中。 即使如此,也不一定能保证你在你可能想要做的事情的附近使用指针。 如果您需要certificate,参考的大小等于参考types。 试着用char&来看看。
这是可能的,但不是严格使用C ++。 由于引用是作为函数的parameter passing的,因此它的值将被存储在堆栈或寄存器中。 这是依赖于硬件架构。 访问这些值需要内联汇编。 请参阅您使用的处理器的参考手册以确定堆栈行为和寄存器地址。 破坏堆栈或寄存器可能很容易导致蓝屏死机,数据丢失甚至永久性损坏系统。 继续极其小心。