Fork me on GitHub

10.4.1 C++ 指针引用以及常量引用

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++ 中的常量引用

  • 示例1:常量引用初始化
#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;
}
  • 示例1:常量引用做函数参数
#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++ 编译器会为常量值分配空间,并将引用名作为这段空间的别名;

posted @ 2022-09-16 17:41  小a的软件思考  阅读(30)  评论(0编辑  收藏  举报