一.指针和引用的定义和性质区别
1.指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元。
而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已。
2.不存在空引用。引用必须连接到一块合法的内存。
3.一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。
4.引用必须在创建时被初始化。指针可以在任何时间被初始化。
后面延伸出来的不同点:
5.可以有const指针,但是没有const引用;
6.指针可以有多级,但是引用只能是一级(int **p;合法 而 int &&a是不合法的)。
7."sizeof引用"得到的是所指向的变量(对象)的大小,而"sizeof指针"得到的是指针本身的大小。
8.指针和引用的自增(++)运算意义不一样。
二.指针和引用作为函数参数进行传递时的使用区别
//指针
void swap0(int*,int*);
//引用
void swap1(int&,int&);
int main()
{
int a = 2;
int b = 3;
swap0(&a,&b);
cout<< "a:"<<a<<"\tb:"<<b<<endl;
swap1(a,b);
cout<< "a:"<<a<<"\tb:"<<b<<endl;
return 0;
}
void swap0(int *a,int *b){
int temp=*a;
*a=*b;
*b=temp;
}
void swap1(int& a,int& b){
int t=a;
a=b;
b=t;
}
三.两者之间的联系
引用在语言内部是用指针实现。
对一般使用场景下,把引用理解为指针,不会犯严重语义错误。引用甚至可以理解为是操作受限(仅容许取内容操作)的指针。
四.该如何选择
当你不需要“重新指向”的情况下,优先选择引用,无论是在空间上还是时间都优于指针。这也就意味着引用用于类的公有接口。引用经常出现的场合自然是对象的表面,而指针常被用于对象内部。
五. 注意
由于无法在调用者的代码处,提供清晰的的引用语义,传统的 C 程序员有时并不喜欢引用。然而随着开发经验的增加,你就会认识到这是信息隐藏的一种形式,它是有益无害的。