在主函数中定义一指针,并且将其作为函数的实参传递给子函数,并且在子函数中对指针的指向进行了重新赋值,那么当返回主函数时,在子函数中进行了操作会被“忘记”从而无效。
若在子函数中使用的是某个变量的引用,那么在子函数中对该引用进行任何更改返回主函数后,其对应的原本的变量的值也会随之改变。
int i=5;
int *p1=&i;//使用指针
int &p2=i;//使用引用
究其原因在于,指针是开辟了一块新的地址存储目标变量的地址,因此如果要改变目标变量的值必须通过间接寻址的方式来进行,但是引用的特征值在于它与目标变量使用同一个内存空间,于是对于引用的任何修改,都是在目标变量的基础上进行的。
因此在使用引用的时候由于不需要重新分配内存空间,就可以避免在某些场景下大数据量的拷贝,如果函数无需改变引用形参的值,最好将其声明为常量引用。
int i=5;
int &p=i;//引用
const int &p=i;//常量引用
实际上,只要理解了上面最本质的特征,那么所有问题都可以迎刃而解了。