引用和指针相同点:
1、指针和引用内容都是地址;
int add(int* a, int*b)
{
cout << "a " << a << " b " <<b << endl;
*a = 1;
*b = 2;
return (*a) + (*b);
}
int add(int&a, int&b)
{
cout << "a " << &a << " b "<<&b << endl;
a = 1;
b = 2;
return a + b;
}
如上代码所示,输出的a,b都是主函数中a,b的地址;
2、指针通过解引用(*)运算符,修改引用都可以改变原变量的值;
3、引用的内部实现方式是通过指针实现的。
引用和指针的区别:
1、引用一定要在定义的时候初始化,并且一经初始化后就不会改变,他永远是第一初始化的的那个对象的引用。(好多文章说不能改变我觉得会产生歧义)如下代码所示,
指针定义的时候不需要初始化,并且指针可以改变指向哪个对象。
总结起来就是:引用“从一始终”,指针“见异思迁”
int i = 5;
int j = 6;
int &k = i;
k = j; //k还是i的引用,此时i的值被修改成6,现在i和j的值都是6;
2、引用不能用const修饰,指针可以用const修饰,const 修饰的指针也是不能更改指向对象的。
3、sizeof引用是对象的大小,sizeof指针是指针的大小,32位是4个字节,64位是8个字节。