1)c++编译器中,使用常指针作为引用的内部实现,因此引用所占用的内存空间大小与指针相同;
2)从使用的角度,引用会让人误认为只是一个别名,没有自己的存储空间,这是c++为了实用性而做出的细节隐藏。
代码案例:
#include <iostream>
using namespace std;
//1.单独定义的引用时,必须初始化,说明很像一个常量
void main01()
{
const int c1 = 10;
int a = 10;
int &b = a;
printf ("&a =%d \n",&a);
printf ("&b =%d \n",&b);//上述两个打印值相同,说明a和b在同一内存空间取别名
cout <<"hello..."<<endl;
system("pause");
return ;
}
//2.普通引用有自己的内存空间
struct Teacher
{
char name[64];//64
int age;//4
int &a;//4
int &b;//4
};
//3.引用的本质 char *const p
void modifyA(int &a1)
{
a1 = 100;
}
void modifyA2(int * const a1)
{
*a1 = 10;//*实参的地址,去间接修改实参的值
}
void main()
{
//char *const p;//引用在c++中实现是一个常量指针
int a =0;
//1.
modifyA(a);//执行这个函数调用时,我们程序员不需要取a的地址
printf ("a=%d\n",a);
//2.
modifyA2(&a);//如果是指针,则需要程序员手工取实参的地址
printf ("a=%d\n",a);
printf ("sizeof(Teacher)=%d\n",sizeof(Teacher));//sizeof(Teacher)=76,a和b很像指针占的内存大小
system("pause");
}
运行结果: