在c++,java,c#等语言上,编译器让我们看到的是,引用就是一个变量的别名,不分配内存空间,而指针分配内存空间,并且可以存储变量的地址。但是实际上编译器是把分配给引用的内存空间给屏蔽掉了,让我们访问不到。
例如: int a=10, int& ref = a; (等价于 int* const ref = &a;这是编译器内部做的处理),我们访问ref 得到10,实际编译器是执行的*ref 得到10,我们访问&ref 得到a的地址,实际编译器是执行ref得到a的地址。这样一来,我们看不到实际内部作为指针的ref,也就是我们称之为别名的ref,被分配到的内存地址,也就认为它只是个别名,不占内存空间。