★ 相同点:
- 1.都是地址的概念: 指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。
★ 区别:
- 1.指针是一个实体,而引用仅是个别名;
- 2.引用使用时无需解引用( ∗ * ∗),指针需要解引用;
- 3.引用只能在定义时被初始化一次,之后不可变;指针可变;
- 4.引用没有 c o n s t const const,指针有 c o n s t , c o n s t const,const const,const 的指针不可变;
- 5.引用不能为空,指针可以为空;
- 6. s i z e o f sizeof sizeof 引用得到的是所指向的变量(对象)的大小,而 s i z e o f sizeof sizeof 指针得到的是指针本身(所指向的变量或对象的地址)的大小;
- 7.指针和引用的自增( + + ++ ++)运算意义不一样;
- 8.引用比指针更安全。由于不存在空引用,并且引用一旦被初始化为指向一个对象,它就不能被改变为另一个对象的引用,因此引用很安全。对于指针来说,它可以随时指向别的对象,并且可以不被初始化,或为 N U L L NULL NULL,所以不安全。 c o n s t const const 指针虽然不能改变指向,但仍然存在空指针,并且有可能产生野指针(即多个指针指向一块内存, f r e e free free掉一个指针之后,别的指针就成了野指针)。
对于第
8
8
8点扩展:
指针更灵活,引用更安全
1.指针比引用更安全
- 1.1 1.1 1.1 引用比指针更安全,比如:如果调用一个某类型空悬指针(空悬指针:此指针的值不是空,但是它指向的内容已经被 d e l e t e delete delete了)的成员方法,可能导致系统崩溃;但是引用永远不能是空的,就不存在这个问题.
2.指针比引用更灵活
-
2.1
2.1
2.1 你可以让一个函数的最后一个参数的类型是指针,缺省值是
N
U
L
L
NULL
NULL;在这个函数里面检查
此指针的值,如果是空则做 1 1 1,如果不是空则做 2 2 2(会用到这个指针).而如果用引用,则无法实现. - 2.2 2.2 2.2 对指针可以有 + + , − − ++, -- ++,−−这样的操作;而引用永远只能指向一个地方.而且只能在初始化的时候指定,以后就不能重新指向别的对象了.