C语言中利用Swap函数交换变量a,b
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相关推荐
- c语言读取文件字节数,怎么在C语言中利用fstat函数获取文件的大小
怎么在C语言中利用fstat函数获取文件的大小 发布时间:2021-01-22 17:03:17 来源:亿速云 阅读:110 作者:Leah 怎么在C语言中利用fstat函数获取文件的大小?针对这个问 ...
- go语言中利用匿名函数和闭包实现文件名修改
package mainimport ("fmt""strings" )//利用匿名函数和闭包实现文件后缀修改 func makeSuffix(suffix s ...
- 【摘录】C语言中利用 strtok函数进行字符串分割
C语言不像Java,Php之类的高级语言,对象中直接封装了字符串的处理函数.C语言中进行普通的字符串处理也经常会让我们焦头烂额--不过好在C语言 中还是提供了像strtok这样功能强大的字符串处理函数 ...
- java swap函数_Java 利用swap函数交换两个整型数据值
提到交换两个数a, b的值,一定可以想起很多方法,a = a+b;b = a - b; a = a - b;借助temp的方法等等,但是如果食用swap方法的话,这个问题可是很有研究的了,要求使用sw ...
- 【示例】C语言中利用数组存放函数指针
C语言中利用数组存放函数指针,增加函数使用的灵活性.使用时只需提供数组索引,即可调用不同函数. 预备知识: 1.指向函数的指针 一个函数在编译时被分配一个入口地址,这个地址就被称为函数的指针. 例如: ...
- C语言中临时变量写在哪里,C语言中不允许创建临时变量,交换两个数的内容
在C语言中可以通过建立临时变量来实现两个变量的交换,当不允许建立临时变量时,应该怎样实现两变量的交换呢? 假设有两个变量num1和num2:下面通过两种方法进行分析. 方法一:利用加减法.具体算法分析 ...
- C++中的swap(交换函数)
C++中的swap(交换函数) 交换两个变量的值很简单. 比如 int a = 1; b = 2; 交换a b的值 这个很简单 很容易想到的是找个中间变量比如 int temp = a; a = ...
- c语言使用指针在被调函数中改变主调函数的变量 地址运算符 间接运算符
1.指针 用于存储变量的地址 指针是一个值为内存地址的变量. 2.&运算符(地址运算符) &后跟一个变量名,给出变量的地址 &a,表示变量a的地址 3.*运算符(间接运算符/解 ...
- C语言中比较大小的函数模板,C语言中实现模板函数小结 : 不敢流泪
--by boluor 2009/5/20 如果要写个函数支持多种数据类型,首先想到的就是C++的模板了,但是有时候只能用C语言,比如在linux内核开发中,为了减少代码量,或者是某面试官的要求- 考 ...
最新文章
- 3.Utm详细实现-用户生命流程
- java打印九九乘法表——CSDN博客
- jquery实现上下左右键盘监听_jQuery监听键盘事件及相关操作使用
- Jsp+Ssm+Mysql实现的进销存管理系统
- spring官方文档列表
- 射频IC理论知识/参考书
- 技术与管理看看华为怎么说
- 2021-04-07
- js定义入参_js函数传参类型
- 基于vue实现网页直播推流(不能落地,仅作记录)
- 【word】word表格不自动跨页,文字显示不全
- 借助Houdini PDG批量处理alembic文件
- jupyter学习记录(一)——安装模块与导入图片
- lqr ilqr代码实例
- docker部署Sers
- nn.GLU()的实现
- String和StringBuffer的转换
- 基于Docker的Mysql主从配置搭建
- Android开发:基于Android Studio编写一个简单的账本
- 1~100的累加和,累乘(阶乘)
热门文章
- 虚拟化系列-VMware vSphere 5.1 VDP备份管理
- 【C++】关键字restrict的作用
- python京东预约抢购_京东抢购脚本js教程
- 电脑公司 雨林.番茄.深度.龙帝国.系统之家.系统光盘收录大全
- 求无限循环小数的循环节
- 查看LINUX放开端口,linux如何查看端口是否开放?
- 【Hackathon】基于RKNPU2给FastDeploy仓库贡献代码
- 【腾讯云服务器+PicGo搭建自己的图床】利用腾讯云服务器搭建自己的私人图床
- 第19节 HSRP-热备份路由协议原理及实验演示—基于Cisco Packet Tracer
- TCP的滑动窗口与拥塞窗口