10.4.1 C 语言中,间接赋值是指针存在的最大意义
#include "iostream"
using namespace std;
struct Teacher
{
char name[64];
int age;
};
// 函数参数为 二级指针,做输出
int getTeacher(Teacher** p)
{
if (p == NULL)
{
return -1;
}
Teacher* tmp = NULL;
tmp = (Teacher*)malloc(sizeof(Teacher));
if (tmp == NULL)
{
return -2;
}
// p 是实参的地址,使用 *p 去间接的修改实参的值
*p = tmp;
(*p)->age = 33;
}
int main()
{
Teacher* pT2 = NULL;
getTeacher(&pT2);
cout << "Teacher pT2 age: " << pT2->age << endl;
getchar();
return 0;
}
10.4.2 C++ 中的指针引用
#include "iostream"
using namespace std;
struct Teacher
{
char name[64];
int age;
};
// 指针的引用
int getTeacher2(Teacher*& myp)
{
// 由于 myp 是指针的引用
// 给 myp 赋值,就相当于给 main 函数中的 pT2 赋值
myp = (Teacher*)malloc(sizeof(Teacher));
if (myp == NULL)
{
return -1;
}
myp->age = 36;
return 0;
}
void FreeTeacher(Teacher* pT)
{
if (pT == NULL)
{
return;
}
free(pT);
}
int main()
{
Teacher* pT2 = NULL;
getTeacher2(pT2);
cout << "age: " << pT2->age << endl;
free(pT2);
getchar();
return 0;
}
10.4.3 C++ 中的常量引用
#include "iostream"
using namespace std;
int main()
{
// 普通引用
int a = 10;
int& b = a;
cout << "b1: " << b << endl;
b = 99;
cout << "a: " << a << "\tb2: " << b << endl;
// 常量引用
int x = 20;
const int& y = 30; // 常量引用,让变量 y 拥有只读属性
cout << "y: " << y << endl;
//y = 100; // 此处,编译失败。
// 常量引用初始化,分两种情况
// 1,用变量 初始化 常量引用
// 2,用常量(字面量) 初始化 常量引用
{
const int a = 10; // C++ 编译器,把 a 放在符号表中
// 下面一行代码,编译失败,原因分析:
// 引用,是给内存取别名,而 100 没有内存地址
// int& n = 100;
const int& m = 50;
}
getchar();
return 0;
}
#include "iostream"
using namespace std;
struct Teacher
{
char name[64];
int age;
};
void printTeacher(const Teacher& t)
{
cout << "t: " << t.age << endl;
}
int main()
{
Teacher t2;
t2.age = 36;
printTeacher(t2);
getchar();
return 0;
}
10.4.4 常量引用总结
const&
相当于 const int * const m
;
普通引用
相当于 int * const m
;
- 当使用常量(字面量)对 const 引用进行初始化时,C++ 编译器会为常量值分配空间,并将引用名作为这段空间的别名;