引用和指针的区别

来源:互联网 发布:邢山虎 知乎 编辑:程序博客网 时间:2024/06/05 05:59

今天看书时无意中看到了一个 int &a;本来想简单的百度一下就以为可以解决问题了,但是后来又不止一次的遇到这个问题,自己脑海中还是没有对引用有清晰的理解,所以写个博文来简单总结一下。

1.指针可以在运行时改变所指向的值,但是引用一旦与某个对象绑定后就不可以改变了;

2.编译时,“符号表“记录的是变量名和变量地址,指针在符号表上记录的是指针变量的地址,而引用记录的是引用地址的地址值,而符号表在生成后就不会再改,所以指针可以改变指向的值,而引用就不可以再改变了;

3.指针在定义时会被分配内存空间,而引用不会被分配内存空间,是和引用对象共用一个内存空间,当然,引用可以改变那个内存空间的值;


所以,引用本质上是一个变量的别名。


例子:

int i;

int *a = &i;//这里a是一个指针,它指向变量i

int &b = i;//这里b是一个引用,它是变量i的引用,引用是什么?它的本质是什么?下面会具体讲述

int * &c = a;//这里c是一个引用,它是指针a的引用

int & *d;//这里d是一个指针,它指向引用,但引用不是实体,所以这是错误的

void function(int &a)

{
a = 100;
}

int main()

{
int x = 200;

function(x);

return(0);
}

0 0
原创粉丝点击