指针的概念
- 指针是一个地址变量,把地址存放在一个变量中,然后通过先找出地址变量中的值,再由此地址找到要访问的变量的方法,称为“间接访问”。
引用的概念
- 引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。
引用的特性
- 引用在定义时必须初始化
- 一个变量可以有多个引用
- 引用一旦引用一个实体,再不能引用其他实体
两者本质
- 指针是地址,引用是别名,都是间接访问的地址概念。
- 汇编代码中指针和引用在编译器中的实现是一样的
- 指针指向一块内存,它的内容是所指内存的地址;而引用则是某块内存的别名。
指针和引用的区别
- 指针是一个实体,而引用仅是个别名。
- 引用只能在定义时被初始化一次,之后不可变,但指针可以改变。
- 指针可以有多级,但引用只有一级。
- 引用不能为空,指针可以为空。
- sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身的大小
- 指针和引用的自增(++)运算意义不一样
- 引用是类型安全的,而指针不是 ,引用比指针多了类型检查。
- 引用没有const,指针有const,const的指针不可变。
- 访问实体方式不同,指针需要显式解引用,引用编译器自己处理。
指针和引用的效率
- 两者的效率是一致的,因为在底层中,指针和引用的参数都指向同一个地址。
- 在高级编程语言中,因为用*传参可能会指向空的地址或者错误的地址,所以要时时判断参数是否为空,导致降低效率。
- 而用&传参数,则参数不可能为空或者错误地址,这也算稍微提升了一些效率。