int a = 10;
             int *p = &a;//指针
             int& b = a; //引用

可以从上面简短的代码中看到,在指针和引用中都有&操作符,两个的区别是:当&前面有类型时(例如int),这种情况属于引用。

接下来,可以看一下对应的汇编代码:

引用与指针的区别


汇编上来看,指针与引用是相同的,没有区别。因此,引用在汇编上就是指针。它们都是地址的概念,都是在内存中用一块内存来存储所指向的地址。

但是它们还是有一些区别的:

(1)指针可以有多级指针,而引用只能有一级引用;

(2)指针可以改变指向,但是引用只能在定义时被初始化一次,之后不能再变,即“引用从一而终”;

(3)引用不能为空,必须设置初始值,而指针可以为空;

(4)引用在使用时无需解引用(*),而指针需要解引用,因此引用使用相对方便;

                      代码:int array[] = { 12, 4, 5, 6, 7 };

int *p1 = array;

int (*p2)[5] = &array;

int (&p3)[5] = array;

cout<<sizeof(p1)<<endl;

cout<<sizeof(p2)<<endl;

cout<<sizeof(p3)<<endl;

引用与指针的区别

(5)从上面的代码可以看到,引用与指针的又一区别:

        sizeof指针:得到的是指针本身(所指向的变量或对象的地址)的大小;

        sizeof引用:得到的是所指向的变量(或对象)的大小;

       因为,在访问引用变量(或对象)的时候,它会自动进行解引用,实际上是访问变量(或对象);

(6)可以直接获取指针的地址,但不能直接获取到引用所对应内存的地址;????????????


相关文章: