C++编程——引用

C++编程——引用,第1张

文章目录
  • 1. 引用的基本使用
  • 2. 引用的注意事项
  • 3. 引用做函数参数
  • 4.引用做函数的返回值
  • 5. 引用的本质
  • 6.常量引用

1. 引用的基本使用
  • 作用:给变量起别名( *** 作的是同一块内存空间)
  • 语法:数据类型 &别名 = 原名
2. 引用的注意事项
  • 引用必须初始化
int &b; //错误的 
  • 引用在初始化后,不可以改变
int a = 10;
int b = 10;
int &c = a;
int &c = b; //错误的,初始化之后便不可更改
3. 引用做函数参数
  • 作用:函数传递参数时,可以利用引用的技术让形式参数修饰实参
  • 优点:可以简化指针修改实参
void myswap02(int &a, int &b)
{
	int temp = a;
	a = b;
	b = temp;
}


int main()
{
	int a = 10;
	int b = 20;

	myswap02(a, b);

	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	system("pause");
	return 0;
}
4.引用做函数的返回值
  • 不要返回局部变量的引用
int& test01()
{
	int a = 10; 
	return a;
}


int main()
{
	int &ref = test01();
	cout << ref << endl; //第一次结果正确是因为编译器做了保留
	cout << ref << endl; //第二次结果错误是因为a的内存已经被释放了
	system("pause");
	return 0;
}
  • 函数的调用可以作为左值
int& test01()
{
	static int a = 10; 
	return a;
}


int main()
{
	int &ref = test01();
	cout  << ref << endl;
	cout << ref << endl;

	test01() = 20; //如果函数的返回值是引用,这个函数调用可以作为左值
	cout << ref << endl;
	cout << ref << endl;
	system("pause");
	return 0;
}
5. 引用的本质

本质:引用的本质在C++内部实现是一个指针常量
指针常量:指针的指向不能修改,指针指向的值可以修改,这也解释了为什么引用在初始化后不能改变的问题

// 发现是引用,转换为int* const ref = &a;
void func(int& ref)
{
	ref = 100;  // ref是引用,转换为*ref = 100
}


int main()	
{
	int a = 10;
	int &ref = a; //自动转换为int* const ref = &a;
	ref = 20; //内部发现ref是引用,自动转换为*ref = 20;
	cout << "a:" << a << endl;
	cout << "ref:" << ref << endl;
	system("pause");
	return 0;
}

运行结果:
a:20
ref:20

6.常量引用

作用:常量引用主要用来修饰形参,防止误 *** 作,在参数形参列表中可以加const修饰形参,防止形参改变实参
实例1:

int main()	
{
	//int &ref = 10;错误的写法,引用必须引一块合法的内存空间

	//加上const之后,编译器将代码修改为:
	// int temp = 10;  const int &ref = temp;
	const int &ref = 10;//此时ref = 10;会报错,因为ref变为只读
	system("pause");
	return 0;
}

实例2:

//打印数据函数
void showValue(int &val)
{
	val = 100;//这里的修改将改变a的值
	cout << "val = " << val << endl;
}


int main()	
{
	int a = 10;
	showValue(a);
	system("pause");
	return 0;
}

运行结果:
val = 100

//打印数据函数
void showValue(const int &val)//为了不修改实际参数,需要加const
{
	val = 100;//此时这行代码将会报错(错误:表达式必须为可修改的左值)
	cout << "val = " << val << endl;
}


int main()	
{
	int a = 10;
	showValue(a);
	system("pause");
	return 0;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/578507.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-11
下一篇 2022-04-11

发表评论

登录后才能评论

评论列表(0条)

保存