引用

本文详细探讨了C++中引用和指针的使用方式,包括引用和指针之间的区别,如何通过二维指针进行引用传递,以及在函数返回引用时需要注意的细节。同时,文章还介绍了常量引用的限制以及如何正确地处理它们。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、函数参数引用

交换两个字符串,如下代码所示:

void swap(char *&x, char *&y)//指针引用,传入函数的是实参,不是形参
{
	char *temp;
	temp = x;
	x = y;
	y = temp;
}

int main()
{
	char *a = "My name is Ann.";
	char *b = "What's your name?";
	swap(a, b);
	return 0;
}
采用二维指针代替引用

void swap(char **x, char **y)//二维指针代替引用
{
	char *temp;
	temp = *x;
	*x = *y;
	*y = temp;
}

int main()
{
	char *a = "My name is Ann.";
	char *b = "What's your name?";
	swap(&a, &b);//注意是a,b的引用
	return 0;
}

二、函数返回值的引用

const float pi = 3.14f;
float f;

float f1(float r)
{
	f = r*r*pi;
	return f;
}

float& f2(float r)
{
	f = r*r*pi;
	return f;
}

int main()
{
	float f1(float=5.0); //正确,函数f1默认参数调用
	float& f2(float=5.0);//正确,函数f2默认参数的调用
	float a = f1();//正确,f1的返回值赋给a
	float& b = f1();//错误,函数f1里,f的值回复给一个临时变量temp,该temp有编译器隐式建立,建立该temp的引用b后,函数执行完毕,temp消失,导致错误

	float c = f2();//正确,f2的返回值未建立隐式临时变量temp,直接将全局变量f返回给主函数
	float& d = f2();//正确,函数直接使用全局变量的引用
}


三、常量引用

class Test{
public:
	void f(const int &arg);
private:
	int value;
};

void Test::f(const int &arg)
{
	arg = 10;//错误,arg是一个常量类型的引用,值在函数体内不能被修改
	cout << "arg=" << arg << endl;
	value = 20;
}
int main()
{
	int a = 7;
	const int b = 10;
	int &c = b;//错误,b为常量,c必须为常量引用
	const int &d = a;
	a++;
	d++;//d是常量引用,不能使用常量引用该变变量的值

	Test test;
	test.f(a);
	cout << "a=" << a << endl;  //输出,a=8
	return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值