引用和指针的区别
引用和指针
引用其实是变量的另一个别名而已,它用的时候完全与之前的变量一模一样。
- 引用使用的时候是有规则的:
- (1)引用创建时候必须初始化(指针可以在任何时候初始化)
- (2)引用一旦创建就不能更改引用关系(指针还可以指向其他的对象)
(3)引用不能为NULL
另外,指针是会单独分配空间的,而引用不会单独分配空间,如果sizeof指针和引用的话就会看到区别,sizeof(指针)是系统分配给指针的内存是4个字节,而sizeof(引用)的话 是它所引用对象的大小,如果是int p[10];那么它的大小就是40。
- 两者可以作为函数的参数 void func(int &a);void func(int *a);都可以对a所指向或者引用的对象进行更改,但是两者是有区别的,&a完全没有复制的过程直接操作在指向的对象上面,而*a是将对象的指针复制给它
伟哥版本
指针:一个数据对象的地址与引用:一个数据对象的别名之间的区别(不区分C/C++)区别: 1. 空值:指针可以为空,悬空指针问题由此而来;引用无法为空,只有存在的数据对象才有别名。 2. 改变:指针可以更改;引用(别名)则不能易主。 3. 大小:指针是实体,大小为4字节(32位系统);引用仅为别名,大小为其依附数据对象的大小。 4. 安全:指针没有类型检查;引用有类型检查。 5. 访问:指针间接访问对象;引用直接访问对象。 小结:在函数参数传递中,指针与引用均可解决大块数据或对象传递效率低和空间开销大的问题。