/* 测试环境:windows XP 32位 Visual C++ 6.0
2017/2/23
反汇编比较:引用与一级指针反汇编代码完全相同,包括this指针的传递同样是使用ecx。
都使用了间接寻址方式。
printf("%d",x);
004010AD mov eax,dword ptr [ebp-4]
004010B0 mov ecx,dword ptr [eax] //利用eax间接寻址,将x存入ecx
004010B2 push ecx
004010B3 push offset string “%d” (0043101c) //压栈参数
004010B8 call printf (00408290)
004010BD add esp,8 //cdcel是外平栈
*/
/部分测试代码,仅保留类/
#include<iostream>
class base
{
private:
int x;
public:
base()
{
x=10;
}
void print()
{
printf("%d",x);
}
};
void TEST(base &a)
{
a.print();
}
int main()
{
base a;
TEST(a);
return 0;
}
/*
在反汇编中无法判断是指针还是引用,但是指针可以进行再次赋值,而引用不允许。
这是判断是不是指针的方法。
*/