1:非空区别,在任何情况下都不能使用指向空值的引用。一个引用必须总是指向某些对象。所以如果你使用一个变量并让它指向一个对象,但是该变量在某些时候也可能不指向任何对象,这时应该将这个变量声明为指针,这样就可以给这个变量赋值;相反如果这个变量肯定指向一个对象,并且这个对象不允许为空,那么就应该声明为引用,引用的效率要高于指针效率;
2:合法性区别,我们在写代码的时候,对于指针通常要进行非空验证,if(p == NULL) return NULL ,但引用是不需要的;
3:可修改性,指针是可以修改的,但是引用总是指向初始赋值的对象内容;
以上三条决定了它们各自的应用场景。
延伸:想想参数传递的三种情况1:传值 2:传指针 3:传引用