C++——引用

C++引用:

      C++中引用是一个别名,也就是说,它是已经某个已存在变量的另一个名字,一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量

C++引用和指针:

引用和指针很容易混淆,但他们之间有以下区别:

     1.引用不存在空引用,引用必须连接到某块合法空间

     2.一旦引用被初始化为一个对象,就不能指向另一个对象

     3.引用必须在创建时初始化

引用的基本语法:

     1.初始化:

int i = 10;
int &a = i;//Type &别名 = 原名
//数组的引用
int arr[5] = {1,2,3,4,5};
//方式一:
int (&prArr)[5] = arr;
//方式二:
typedef int(ARRAYREF)[5];//一个具有5个元素的int类型的数组
ARRAYREF &prArr1[5] = arr;

    2.参数传递:

int main() {
	int a = 10;
	int b = 12;
	swap3(a,b);
	system("pause");
	return EXIT_SUCCESS;
}

void swap3(int &x, int &y) {//int &x <==>int &x = a;
	int temp = y;
	y = x;
	x = temp;
}

注意事项:

     1.必须引用一块合法的空间

     2.不要返回局部变量的引用,如果返回值是引用那么函数的调用可以用作左值

本质:在C++中引用的本质就是一个指针常量

int a = 10;
int &b = a;
//编译器自动转换为 int* const b = &a;
b = 20;
//内部发现b是引用,自动转换为*b = 20 

指针的引用:

void AllocatePointer(Teacher** teacher) {
	*teacher = (Teacher *)malloc(sizeof(Teacher));
	(*teacher)->m_age = 20;
}

void AllocateReference(Teacher*& tea) {//Teacher*& tea = teacher;
	tea->m_age = 30;                   //Teacher** const tea = &teacher;
}

int main() {
	Teacher a;
	Teacher* teacher = NULL;//定义一个指向Teacher结构体类型的指针变量
	teacher = &a;
	Teacher** t = &teacher;//
	AllocatePointer(&teacher);
	cout << teacher->m_age << endl;
	AllocateReference(teacher);
	cout << teacher->m_age << endl;
	system("pause");
	return EXIT_SUCCESS;
}

常量的引用:

       字面量不能赋给引用,但是可以赋给const引用

const int &re = 10;

 

上一篇:CSS 有序或者无序列表的前面的标记 list-style-type 属性


下一篇:reduce 求数组里每个元素出现的次数(价值50块钱的题目)