
更多 IT 认证课程请访问 美河学习在线 www.eimhe.com
C++
1. 引用和指针的区别?
1) 指针是一个实体,需要分配内存空间。引用只是变量的别名,不需要分配内存空间。
2) 引用在定义的时候必须进行初始化,并且不能够改变。指针在定义的时候不一定要
初始化,并且指向的空间可变。(注:不能有引用的值不能为 NULL)
3) 有多级指针,但是没有多级引用,只能有一级引用。
4) 指针和引用的自增运算结果不一样。(指针是指向下一个空间,引用时引用的变量
值加 1)
5) sizeof 引用得到的是所指向的变量(对象)的大小,而 sizeof 指针得到的是指针
本身的大小。
6) 引用访问一个变量是直接访问,而指针访问一个变量是间接访问。
7) 使用指针前最好做类型检查,防止野指针的出现;
8) 引用底层是通过指针实现的;
9) 作为参数时也不同,传指针的实质是传值,传递的值是指针的地址;传引
用的实质是传地址,传递的是变量的地址。
2. 从汇编层去解释一下引用
1. 9: int x = 1;
2. 00401048 mov dword ptr [ebp-4],1
3. 10: int &b = x;
4. 0040104F lea eax,[ebp-4]
5. 00401052 mov dword ptr [ebp-8],eax
x 的地址为 ebp-4,b 的地址为 ebp-8,因为栈内的变量内存是从高往低进行分配
的。所以 b 的地址比 x 的低。lea eax,[ebp-4] 这条语句将 x 的地址 ebp-4 放
入 eax 寄存器 mov dword ptr [ebp-8],eax 这条语句将 eax 的值放入 b 的地址 e
bp-8 中上面两条汇编的作用即:将 x 的地址存入变量 b 中,这不和将某个变量的
地址存入指针变量是一样的吗?所以从汇编层次来看,的确引用是通过指针来实
现的。
评论