C语言中利用Swap函数交换变量a,b

常见错误写法
error1

void Sawp_error1(int a,int b)
{int tmp;tmp=a;a=b;b=tmp;
}
int main()
{int a=10;int b=20;Sawp_error1(a,b);printf("%d %d\n",a,b);return 0;
}

PS
局部变量:定义在函数内部的变量只能在函数内部使用。
上面代码里在main函数中定义的a,b与Swap函数中a,b只是同名,只在Swap函数中交换a与b的值而不影响main函数中的a与b的值。

error2

void Sawp_error2(int *p1,int *p2)
{int *tmp;tmp=p1;//将a的地址赋值给tmpp1=p2;p2=tmp;
}
int main()
{int a=10;int b=20;Sawp_error2(&a,&b);printf("%d %d\n",a,b);return 0;
}

PS
在上面代码中Swap函数虽然使用指针,但仅仅修改的只是指针,交换a和b的地址,对于main函数中a和b的值并未交换。

error3

void Sawp_error3(int *p1,int *p2)
{int *tmp=*p1;//野指针*p1=*p2;*p2=*tmp;
}
int main()
{int a=10;int b=20;Sawp_error3(&a,&b);printf("%d %d\n",a,b);return 0;
}

PS
Swap函数中出现野指针,不能访问的指针,出现程序崩溃。
野指针(悬挂指针):没有访问权限的指针,这个指针有可能存在也有可能不存在,但是你不能访问。(野指针不好判断)
1、地址不存在(例如电话号码少一位)。
2、地址存在,但是不能访问(例如电话号码写成别人)。
3、地址之前可以访问,但现在不可以(更换电话号码)。

正确写法

void Sawp(int *p1,int *p2)
{int tmp;tmp=*p1;//tmp=a*p1=*p2;//a=b*p2=tmp;//b=tmp
}
int main()
{int a=10;int b=20;Sawp(&a,&b);printf("%d %d\n",a,b);return 0;
}

结论
一个函数(父函数)调用另一个函数(子函数),想通过子函数修改父函数的数据,必须传指针,子函数内部解引用。也就是子函数的改变要想影响父函数的数据必须传指针和解引用。
error1中既没有指针也没有解引用,error2中只是传指针但在Swap函数中没有使用解引用 error3中传了野指针导致程序崩溃。

C语言中利用Swap函数交换变量a,b相关推荐

  1. c语言读取文件字节数,怎么在C语言中利用fstat函数获取文件的大小

    怎么在C语言中利用fstat函数获取文件的大小 发布时间:2021-01-22 17:03:17 来源:亿速云 阅读:110 作者:Leah 怎么在C语言中利用fstat函数获取文件的大小?针对这个问 ...

  2. go语言中利用匿名函数和闭包实现文件名修改

    package mainimport ("fmt""strings" )//利用匿名函数和闭包实现文件后缀修改 func makeSuffix(suffix s ...

  3. 【摘录】C语言中利用 strtok函数进行字符串分割

    C语言不像Java,Php之类的高级语言,对象中直接封装了字符串的处理函数.C语言中进行普通的字符串处理也经常会让我们焦头烂额--不过好在C语言 中还是提供了像strtok这样功能强大的字符串处理函数 ...

  4. java swap函数_Java 利用swap函数交换两个整型数据值

    提到交换两个数a, b的值,一定可以想起很多方法,a = a+b;b = a - b; a = a - b;借助temp的方法等等,但是如果食用swap方法的话,这个问题可是很有研究的了,要求使用sw ...

  5. 【示例】C语言中利用数组存放函数指针

    C语言中利用数组存放函数指针,增加函数使用的灵活性.使用时只需提供数组索引,即可调用不同函数. 预备知识: 1.指向函数的指针 一个函数在编译时被分配一个入口地址,这个地址就被称为函数的指针. 例如: ...

  6. C语言中临时变量写在哪里,C语言中不允许创建临时变量,交换两个数的内容

    在C语言中可以通过建立临时变量来实现两个变量的交换,当不允许建立临时变量时,应该怎样实现两变量的交换呢? 假设有两个变量num1和num2:下面通过两种方法进行分析. 方法一:利用加减法.具体算法分析 ...

  7. C++中的swap(交换函数)

    C++中的swap(交换函数) 交换两个变量的值很简单. 比如 int a = 1; b = 2; 交换a b的值 这个很简单 很容易想到的是找个中间变量比如  int temp  = a; a = ...

  8. c语言使用指针在被调函数中改变主调函数的变量 地址运算符 间接运算符

    1.指针 用于存储变量的地址 指针是一个值为内存地址的变量. 2.&运算符(地址运算符) &后跟一个变量名,给出变量的地址 &a,表示变量a的地址 3.*运算符(间接运算符/解 ...

  9. C语言中比较大小的函数模板,C语言中实现模板函数小结 : 不敢流泪

    --by boluor 2009/5/20 如果要写个函数支持多种数据类型,首先想到的就是C++的模板了,但是有时候只能用C语言,比如在linux内核开发中,为了减少代码量,或者是某面试官的要求- 考 ...

最新文章

  1. 3.Utm详细实现-用户生命流程
  2. java打印九九乘法表——CSDN博客
  3. jquery实现上下左右键盘监听_jQuery监听键盘事件及相关操作使用
  4. Jsp+Ssm+Mysql实现的进销存管理系统
  5. spring官方文档列表
  6. 射频IC理论知识/参考书
  7. 技术与管理看看华为怎么说
  8. 2021-04-07
  9. js定义入参_js函数传参类型
  10. 基于vue实现网页直播推流(不能落地,仅作记录)
  11. 【word】word表格不自动跨页,文字显示不全
  12. 借助Houdini PDG批量处理alembic文件
  13. jupyter学习记录(一)——安装模块与导入图片
  14. lqr ilqr代码实例
  15. docker部署Sers
  16. nn.GLU()的实现
  17. String和StringBuffer的转换
  18. 基于Docker的Mysql主从配置搭建
  19. Android开发:基于Android Studio编写一个简单的账本
  20. 1~100的累加和,累乘(阶乘)

热门文章

  1. 虚拟化系列-VMware vSphere 5.1 VDP备份管理
  2. 【C++】关键字restrict的作用
  3. python京东预约抢购_京东抢购脚本js教程
  4. 电脑公司 雨林.番茄.深度.龙帝国.系统之家.系统光盘收录大全
  5. 求无限循环小数的循环节
  6. 查看LINUX放开端口,linux如何查看端口是否开放?
  7. 【Hackathon】基于RKNPU2给FastDeploy仓库贡献代码
  8. 【腾讯云服务器+PicGo搭建自己的图床】利用腾讯云服务器搭建自己的私人图床
  9. 第19节 HSRP-热备份路由协议原理及实验演示—基于Cisco Packet Tracer
  10. TCP的滑动窗口与拥塞窗口