相同点
它们都是地址的概念,其中指针指向一块内存,它的内容是所指内存的地址;而引用是某块内存的别名,具体来说,指针是一个变量的地址,引用是一个变量的别名。
引用和指针有什么区别?
本质:引用是别名,指针是地址,具体的:
- 指针是一个实体,而引用仅是个别名。程序为指针变量分配内存区域,而不为引用分配内存区域,因为引用声明时必须初始化,从而指向一个已经存在的对象。
- 指针在运行时可以改变其所指向的值,而引用一旦和某个对象绑定后就不再改变。这句话可以理解为:引用不可以改变指向,对一个对象"至死不渝";但是指针可以改变指向,而指向其它对象。
- 引用不能为NULL,指针可以为NULL。
- 可以有const指针,但是没有const引用。
- “sizeof 引用" = 指向变量的大小 , "sizeof 指针"= 指针本身的大小。引用的大小是所指向的变量的大小,因为引用只是一个别名而已;指针是指针本身的大小,4个字节。
- 指针和引用的自增(++)运算意义不一样:指针自增即指向下一个内存地址;引用自增是所指单元值++;
- 指针可以有多级,但是引用只能是一级(int **p;合法 而 int &&a是不合法的)
int&* p3; // 非法。指向引用的指针是非法的