浅析C++ 小语法

本文分析了C++中值传递的三种方式,包括直接值交换的不可行性,通过指针实现值交换的可行性,以及使用引用reference进行值交换的有效方法。详细解释了引用作为参数时如何实现变量的互换,强调了引用作为别名的特性。

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

一、引用和指针

1.关于值传递的几种方式可行性的讨论

1)编写函数直接进行值交换(不可行)

首先编写一个函数体现值交换的思想

void swap(int x, int y)
{
	int z = 0;
	z = x, x = y, y = z;
}

在主函数中定义两个值,调用swap 函数,观察能否实现值的互换

#include <iostream>

void swap(int x, int y)
{
	int z = 0;
	z = x, x = y, y = z;
}
int main()
{
	int a = 12, b = 34;

	std::cout << "Before calling swap function" << std::endl;
	std::cout << "a=" << a << std::endl;
	std::cout << "b=" << b << std::endl;

	swap(a, b);

	std::cout << "After calling swap function" << std::endl;
	std::cout << "a=" << a << std::endl;
	std::cout << "b=" << b << std::endl;

	return 0;
}

值没有发生互换

a,b两个值是实参,而x,y两个是形参。在调用swap函数后,a,b分别赋值给了x,y这两个形参,但形参在swap函数里的运算并不能影响到主函数里a,b两个实参值。

2)编写函数以指针作为形参(可行)

#include <iostream>

void swap(int* x, int* y)
{
	int z = 0;
	z = *x, *x = *y, *y = z;
}
int main()
{
	int a = 12, b = 34;

	std::cout << "Before calling swap function" << std::endl;
	std::cout << "a=" << a << std::endl;
	std::cout << "b=" << b << std::endl;

	swap(&a,& b);

	std::cout << "After calling swap function" << std::endl;
	std::cout << "a=" << a << std::endl;
	std::cout << "b=" << b << std::endl;

	return 0;
}

假设a的地址为0X0,b的地址为1X1,调用swap函数:

a,b的地址赋给了x,y,也就是说x,y分别指向a,b

z的值变为*x(x指向a,相当于z=a=12)

*x=*y说明,地址0X0上存放的值变成了y指向的值(即b=34),

*y=z说明,地址1X1上存放的值变成了12

3)利用引用reference进行传递 (可行)

#include <iostream>

void swap(int& x, int& y)
{
	int z = 0;
	z = x, x = y,  y = z;
}
int main()
{
	int a = 12, b = 34;

	std::cout << "Before calling swap function" << std::endl;
	std::cout << "a=" << a << std::endl;
	std::cout << "b=" << b << std::endl;

	swap(a, b);

	std::cout << "After calling swap function" << std::endl;
	std::cout << "a=" << a << std::endl;
	std::cout << "b=" << b << std::endl;

	return 0;
}

 

引用相当于被引用的别名,在swap函数中,&x=a,&y=b。

调用swap函数,&x和&y发生互换,相当于a,b发生互换,这种方式与第一种方式不同。

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值