指针和引用的区别
1.定义方式不同:指针使用所指对象的类型加上 * 定义,如:int* p; 可以不初始化。而引用定义时使用变量名加 & 的组合, 并且引用必须初始化。
2.内存占用不同:指针本身是需要占用内存的,而引用不需要占用内存。因为引用是对象的别名,它指向引用对象的内存。
3.操作符重载不同:指针的操作符(*、->)可以进行重载,而引用不能重载操作符。
4.指针所指的对象可以更改,而引用一旦初始化后,便无法指向其他的对象。
5.指针可以指向指针,即指针的指针(甚至是指针的指针的指针);因为引用本身不是一个对象,所以不能定义引用的引用。引用虽然可以作为初始值,但实际上还是以与引用绑定的对象为初始值。
举例:
int num=1;
int* p=#
int** p2=&p; //指向指针的指针
int& ref=num;
int&& ref2=ref; //错误,&&不表示引用的引用
int& ref3=ref; //正确,ref3实际上指向的num
适用场景
指针:
1.动态分配内存时:使用 new 动态分配内存时,需要使用指针管理这些内存空间。
2.需要指向不同对象时:引用一旦初始化,无法指向其他对象,因此,这种情况只能使用指针。
引用:
1.函数传参:引用即对象的别名,在函数中可直接对引用的对象进行操作,无需解引用。并且可以节省大量内存空间,因为引用并未分配实际的内存空间。
2.函数返回值:使用引用作为返回值,可以减少对返回值的拷贝,提高效率。
综上,指针和引用都是c++非常重要的工具,实际应用中要根据具体需求选择合适的方式。