C++基础知识
指针和引用的区别
- 是否分配空间
- 是否需要初始化
- 是否支持多级
- 是否可以支持++
- sizeof的大小
- 引用是直接访问变量,指针是间接访问
- 指针需要做类型检查
- 引用底层是通过指针实现的
- 作为参数时,引用是传地址,指针实质上是传地址
从汇编层去解释一下引用
1 | 1. 9: int x = 1; |
lea eax,[ebp-4] 这条语句将x的地址ebp-4放入eax寄存器mov dword ptr [ebp-8],eax 这条语句将eax的值放入b的地址ebp-8中,作用即:将x的地址存入变量b中,所以从汇编层次来看,的确引用是通过指针来实现的。
指针参数传递和引用参数传递
- 指针传参,实质上是值传递,被调函数的形参会被当做局部变量,在栈中开辟空间,不会影响主调函数的实参。
- 引用参数,形参也开辟了空间,但存放的是主调函数实参变量的地址。被调函数的对行参操作,实际上是间接寻址。
- 从编译角度,程序编译的时候,分别将指针和引用添加到了符号表上,符号表记入了变量名和变量所对应的地址。指针变量在符号表对应的地址值,为指针变量的地址,所以可以改变。而引用在符号表对应地址值为引用对象的地址。符号表生成后就不能再改变,所以引用的对象不能修改。
形参和实参的区别
- 分配内存的生命周期