引用与(一级)指针

/* 测试环境: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;
}

/*
在反汇编中无法判断是指针还是引用,但是指针可以进行再次赋值,而引用不允许。
这是判断是不是指针的方法。
*/

猜你喜欢

转载自blog.csdn.net/u011256974/article/details/89193904