引用和指针

观察下面一段代码和它的反汇编

#include<stdlib.h>
#include<stdio.h>

void Fun1(int& x)
{
    x = 2;
}
void Fun2(int* x)
{
    *x = 2;
}
int main()
{
    int a = 1;
    Fun1(a);
    Fun2(&a);
    return 0;
}

 

 无论是通过引用传递还是通过指针传递,他们的反汇编都差不多是一样的:将数据的地址压入栈中,来让函数能够通过地址来访问数据,进行修改。

根据我的理解,引用和指针在底层本质上相似,而在使用时却可以像基本类型那样使用。

指针所存储的地址可以随意修改,可能会造成不好的结果,而引用有着和指针相似的功能,但编译器不允许你通过引用来修改之前所传递的地址,所以引用是一种更为安全的选择。

 

posted @ 2021-03-25 15:19  Yanmo  阅读(32)  评论(0)    收藏  举报