大家好,我是阿林,一个c++的初学者。记录我学习c++的过程。
引用符号相当于在原有的空间命名中取了一个别名。
/引用的概念
void main91()
{
int a = 10;
int &b = a;//相当取了一个别名
b = 100;//通过把a修改成100了
cout << "a = " << a << " b = " << b << endl;
system("pause");
}
void main93()
{
int a = 10;
int &b = a;
//int &c;//普通引用必须要初始化
system("pause");
}
引用符号是由他自己的空间存储的。通过引用可以间接赋值。
我们要区分指针和取地址符号复杂函数的使用。下列我写了一些函数可以更加好的区分它的作用
struct Teacher
{
char name[64];
int age;
};
void printfT(Teacher* pT)
{
cout << pT->age << endl;
}
//pT是t1的别名,相当修改了t1;
void printfT2(Teacher& pT)
{
//cout << pT.age << endl;
pT.age = 33;
}
//pT和t1是两个不同的变量
void printfT3(Teacher pT)
{
cout << pT.age << endl;
pT.age = 45;//只会修改pT变量,不会修改t1变量
}
void main94()
{
Teacher t1;
t1.age = 35;
printfT(&t1); //相当于传给一个地址,取地符号在这里的引用
printfT2(t1); //pT是t1的别名
printfT3(t1);// pT是形参,t1是拷贝一个数据给pT
cout << "t1.age: " << t1.age << endl;
system("pause");
return;
}
//普通引用是有自己的空间的
struct Teacher2
{
char name[64];//64
int age; //4
int &a; //10 0
int &b; //10 0
};
int modifyA(int& a1)
{
a1 = 100;
}
int modifyA2(int* const a1)
{
*a1 = 10; //*实参的地址,间接的修改实参的值。
}
//3引用的本质
int main()
{
int a = 10;
modifyA(a); //指向这个函数调用的时候,我们程序员不需要取a的地址
modifyA2(&a); //如果是指针,需要我们程序员手工取实参的地址
//char* const p;//引用是一个常量的指针
/*cout << "sizeof(Teacher2)" << sizeof(Teacher2) << endl;*/
/*printf("sizeof(Teacher2):%d \n", sizeof(Teacher2));*/
system("pause");
}