如何得到“引用”变量本身自已的地址?
int a=5,b=7;
int &c=a;
引用类型是一个怪怪的类型,它是指针类型的一个改进,直接用地址表示另一个单元,
上面的c就是引用变量;
所有对c的操作最终将针对目标单元a,包括取地址(&c)将是目标变量的地址,而得不到
它自已的地址;
如何有办法 取到c的地址呢?
[解决办法]
这个&不一定被实现为一个指针,也就是说它没有地址,这样效率更高。
虽然很多情况下 & 被实现为一个指针,但标准并没有要求编译器强制引用实现为一个指针。
如果不被实现为一个指针,那么就没有地址,不占用任何内存空间。
[解决办法]
我认为“引用”变量仍要占单元空间,存放的是一个地址,但编译器阻止你对它本身的任何访问,
从一而终总是指向初始的目标单元,高手可以用汇编语言访问它的单元,在汇编里,引用的本质
就是“间接寻址”,格式: [目标地址]
合法的办法,只能用非法的办法了,利用引用的上一单元的地址,假设是连续分配的,
就是找到引用的地址了.
全局变量
int a=5,b=9;
int u=0; // u的下一地址就是x的
int &x=a;
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int **p=(int **)&u;
p[1]=&b; // 下一地址就是x,将它改到b的地址
Caption=x; // 呵呵,指到了b,是不是
}
结论:引用也是变量,里面存放的目标地址,只要你有本事改变这个地址,
它就改变了引用对象。