目录用fun函数实现两个数的交换函数交换两个数,常见错误总结用fun函数实现两个数的交换 #include <stdio.h> void fun(int *x,int
#include <stdio.h>
void fun(int *x,int *y)//定义fun函数,此时需要注意与main函数时的定义方式相同
{
int t;//定义一个中间变量,用于让两个数交换留一个位置
t=*x,*x=*y,*y=t;
}
void main()
{
int a,b;
scanf("%d %d",&a,&b);//定义两个交换的数
fun(&a,&b);
printf("%d %d\n",a,b);
}
问题:提供俩个数,利用函数实现交换。
出现的错误情况如下:
能实现交换两个数的函数,在函数Swap可以实现。
代码如下:
#include <stdio.h>
void Swap_err01(int a,int b)
{
int tmp;
tmp = a;
a = b;
b = tmp;
}
void Swap_err02(int *p1,int *p2)
{
int *tmp = p1;
p1 = p2;
p2 = tmp;
}
void Swap_err03(int *p1,int *p2)
{
int *tmp;
*tmp = *p1;
*p1 = *p2;
*p2 = *tmp;
}
void Swap(int *p1,int *p2)
{
int tmp;
tmp = *p1;
*p1 = *p2;
*p2 = tmp;
}
int main ()
{
int a=10;
int b=20;
printf("a=%d,b=%d\n",a,b);
//Swap_err01(a,b);
//Swap_err02(&a,&b);
//Swap_err03(&a,&b);
Swap(&a,&b);
printf("a=%d,b=%d\n",a,b);
return 0;
}
编译结果如下:
函数Swap_err01的编译结果:
由结果可见,按值传递,不能达到交换两个数。
按值传递: 函数内部使用的参数称为形参,是通过拷贝实参而来,从而对其进行修改,所以,对原来的实参不会造成修改。
如下图所示,内部变量互不影响。
函数Swap_err02的编译结果:
由结果可见,换位失败,其主要原因就是因为没有解引用,过程可看下图。
函数Swap_err03的编译结果:
由编译结果可见,实行函数的时候,编译器(Visual Studio 2012)报错了,内容是变量tmp没有被定义,其主要原因是,*tmp为悬挂指针(野指针),野指针:没有访问权限的指针(地址)。
函数Swap的编译结果:
由结果可见,实现了两个数换位,解引用之后,将地址内的值换位。
其过程如下图:
注意:子函数的改变能影响到父函数,一定要传指针和解引用,两个条件缺一不可。
int main ()//父函数
{
Fun(&a,&b);//子函数
}
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。
--结束END--
本文标题: C语言用fun函数实现两个数的交换方式
本文链接: https://www.lsjlt.com/news/174334.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0