引用和指针的区别

1.引用相当于一个变量的别名,指针指向内存,存放的是变量的地址

2.引用在定义之后必须被初始化,指针不需要初始化

错误案例:int p0;  int &p1; p1=p0;

3.引用在初始化之后的值不可以改变,指针可以改变

这点从编译角度来分析的话, 程序在编译时分别将指针和引用添加到符号表中,符号表存的是变量和变量的地址,且符号表生成之后不会再改,指针变量的地址值是指针对象的地址(可以修改),而引用在符号表上对应的地址值为引用对象的地址值,所以引用对象不可更改

4.sizeof (引用)返回引用所指变量的大小,sizeof(指针)返回指针的大小。

5.通知引用和指针还经常作为函数参数来传递的,通过引用传递的参数修改后,调用该函数的实参也发生了改变,指针形参改变后实参虽然也会改变,但是和引用不同的是,指针的形参构造的时候会申请内存,引用形参不申请内存。

两整数变量值交换的c程序如下:


void swapint(int *a,int *b)
{
int temp;
temp=*a;
a=*b;
*b=temp;
}

指针a和指针b发生变化后,传递到该函数中的实参发生变化

使用引用机制后,以上程序的c++版本为:


void swapint(int &a,int &b)
{
int temp;
temp=a;
a=b;
b=temp;
}

引用a,b发生变化后,传递到该函数中的实参发生了变化

6.当大型对象传递给形参时,使用引用可以提升效率,因为引用只是一个内存的别名,没有发生对象的复制

参考链接:http://blog.sina.com.cn/s/blog_4ed9fbab01014pp3.html

原文地址:https://www.cnblogs.com/runninglzw/p/4425864.html