写一个函数可以交换两个整形变量的内容

这道题虽然看着简单,但是很容易出错,下面先演示一下错误代码,并分析原因

编译器(vs 2019)

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
swap(int x, int y)
{
	int t = x;
	x = y;
	y = t;
	}
int main()
{
	int a, b;
	scanf("%d %d", &a, &b);//输入
	printf("交换前:%d %d\n", a, b);
	swap(a, b);
	printf("交换后:%d %d\n", a, b);

	return 0;
}

示例:输入 1 2

结果依旧是 1 2

很明显没有实现两个整形替换,虽然能编译但是达不到效果。

分析如下:

当函数调用时,实参传递给形参,形参作为实参的一份临时拷贝,对形参的改变不会影响实参,故上述没有实现 a b互换

正确代码

#include<stdio.h>
swap1(int* pa, int* pb)
{
	int tam = *pa;
	*pa = *pb;
	*pb = tam;
}
int main()
{
	int a, b;
	scanf("%d %d", &a, &b);
	printf("交换前:%d %d\n", a, b);
	swap1(&a, &b);
	printf("交换后;%d %d\n", a, b);
	return 0;
}

 此时,代码才是符合题目要求的,通过pa pb 地址找到 a b实现互换

写到这里,再补充另一道题。另一道为什么就不会像上述题一样,让我们来看一下

题目:写一个函数可以找出两个整数之间的最大值

#include<stdio.h>
get_max(int x, int y)
{
	return(x > y ? x : y);
}
int main()
{
	//定义a=10,b=20
	int a = 10;
	int b = 20;
	int m=get_max(a, b);//采用get_max函数,告诉它比较a,b,结果为m
	printf("%d\n", m);
	return 0;
}

这道题之所以可以实现是因为x y 和a b一样求最大值的结果都是一样的。而最上面的代码改变了改变x y的值,a b是不会变的

以上是个人学习作为巩固,欢迎读者阅读,若有不当之处,欢迎指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

haru不是白仁仔呐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值