C语言用fun函数实现两个数的交换方式

您所在的位置:网站首页 c语言编程实现两个数的交换 C语言用fun函数实现两个数的交换方式

C语言用fun函数实现两个数的交换方式

2023-07-03 02:47| 来源: 网络整理| 查看: 265

用fun函数实现两个数的交换 #include 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_err01)第二种情况:没解引用;(如函数Swap_err02)第三种情况:悬挂指针。(如函数Swap_err03)

能实现交换两个数的函数,在函数Swap可以实现。

代码如下:

#include 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);//子函数 } 总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:详解C语言函数返回值解析C语言中的回调函数实例C语言函数的基本使用和递归小结


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3