这道题虽然看着简单,但是很容易出错,下面先演示一下错误代码,并分析原因
编译器(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是不会变的
以上是个人学习作为巩固,欢迎读者阅读,若有不当之处,欢迎指正!