Swop函数的写法及常见错误示例

数据交换在编程中十分常见,为方便起见,我们可以将其编写为一个交换函数,在需要时引用函数即可。但需要注意的是,子函数的改变想要影响父函数的数据,必须传指针和解引用。下面是交换函数的其程序代码:

#include<stdio.h>
void Swop(int *p1,int *p2)
{int tmp;     //设置中间变量tmp进行数据存储tmp=*p1;     //指针解引用,将a的值赋给tmp*p1=*p2;     //将b的值赋给a*p2=tmp;     //将tmp的值赋给b
}
int main()
{int a=10;int b=20;Swop(&a,&b);        //将a,b的地址赋值给地址变量p1,p2printf("%d,%d\n",a,b);return 0;
}

但是在初学过程中,我们还会出现一些其他问题,我整理了几种常见问题;

错误一:没有使用指针,函数中的数据变化不会影响到父函数中数据的变化

void Swop1(int a,int b)
{int tmp;     tmp=a;       a=b;         b=tmp;
}

这种写法十分有迷惑作用,乍一看似乎没有什么不对,但是此函数中的a,b与父函数中的a,b为同名不同地址的变量,因此在此函数中所做的任何操作,都不能影响到我们需要交换的数据,但是在我们看不到的地方,该函数完成了另一组同名数据的交换。

错误二:没有出现解引用

void Swop2(int *p1,int *p2)
{int *tmp;     tmp=p1;       p1=p2;         p2=tmp;
}

这个函数的错误为我们上文提到的未出现解引用。我们可以直观的发现到,函数交换了p1与p2,但是p1,p2中存储的是a,b的地址,交换后,p1指向b,p2指向a;但是a,b的值仍未发生改变,做一个比喻,我们只是交换了a,b所在房间的钥匙,但并没有移动a与b。

错误三:使用了野指针;

void Swop3(int *p1,int *p2)
{int *tmp;     *tmp=*p1;       *p1=*p2;         *p2=*tmp;
}

这里的*tmp实际上是一个没有初始化的野指针。野指针,也称为悬挂指针,计算机没有访问权限的地址,这个指针有可能不存在,也有可能存在,但是无法访问,野指针是伴随编程发展的一个很麻烦的问题,我们很难进行判断,在编写程序时,应该避开野指针。

Swop函数的写法及常见错误示例相关推荐

  1. 【Python学习笔记—保姆版】第三章—Python流程控制、函数的定义、常见错误、模块与包、类

    第三章-python函数.分支结构 流程控制 if-else for 循环 while循环 continue/break range()函数 列表与元组遍历 练习 函数的定义 变量作用域 基本形式 函 ...

  2. java常见错误示例——JUC并发工具类库导致的线程安全问题

    摘要 通常提到线程安全问题等就有可能听到关线程安全和并发工具的一些片面的观点和结论.比如"把 HashMap 改为 ConcurrentHashMap,就可以解决并发问题了呀"&q ...

  3. vlookup匹配 匹配结果错误_vlookup函数的12种常见错误、原因及解决方法

    vlookup函数是一个非常好用的查找函数,但由于种种原因,在实际使用时会遇到种种让人搞不明白的错误.于是本文就把常遇到的vlookup错误问题来一次大整理,希望能对同学们有用. 一.函数参数使用错误 ...

  4. c语言函数内判断嵌套常见错误,c语言不等于(c语言多个if函数怎么嵌套)

    其实我想问的是!=和==!有区别吗?我测试了一下,好像一样啊... 初学. 不等于符号就是 != != 是逻辑运算符,这个符号一般不适用于字符串的比较 != a为变量,用if语句检测a(不等于,大于, ...

  5. FindBugs常见错误介绍、分析、处理

    FindBugs简单了解 FindBugs-IDEA是个好东西,它是一个静态分析工具,它检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题.有了静态分析工具,就可以在不实际运行程 ...

  6. 使用socket函数的一些常见错误

    原文地址:使用socket函数的一些常见错误 1.socket SOCKET socket( int af, int type, int protocol ); af:常为AF_INET 使用AF_I ...

  7. vlookup匹配值不唯一_数据对比、数据查询匹配Vlookup函数3种常见错误及解决方案...

    Excel中的Vlookup函数,在大家日常数据处理计算中应用的机会非常多,因为它可以帮助我们完成数据查询匹配.数据对比.但是这个函数在使用的过程中也经常会遇到查询错误的问题.根据实践经验总结,发现主 ...

  8. 关于C语言刷题(#define宏定义函数的常见错误)

    关于C语言刷题(#define宏定义函数的常见错误) 首先我们来先看对#define的定义 define,宏定义,C语言中预处理命令一种.分为无参宏定义和带参宏定义.无参宏定义的一般形式为:#defi ...

  9. 【pytorch】normal函数的详细使用和常见错误

    normal函数的详细使用和常见错误 1.normal(mean, std, *, generator=None, out=None) 返回值:一个张量,张量中每个元素是从相互独立的正态分布中随机生成 ...

最新文章

  1. linux基础上的三维重建,Ubuntu16.04下用ZED双目立体相机进行SLAM(以相机轨迹生成和三维重建为例)...
  2. mongodb 结果二次调用_mongodb慢查询记录
  3. 两年的等待,近700页干货,同系列累计销量25万+,第三版内容更扎实
  4. 在Websphere AppServer 5.1中配置数据源
  5. U-Boot 提供的基本命令
  6. android drawpath填充,Android如何用图片来填充Path封闭路径
  7. 【java实训课】web网页相关知识点总结
  8. python三种基本数据类型_Python的三种基本数据类型
  9. 处理机和处理器的区别
  10. 三菱fx3u通讯手册_三菱FX3U与变频器通讯程序如何编写
  11. 【译】Input Method Manager (IMM):输入法管理器
  12. bzoj2151: 种树
  13. Http请求常见Header
  14. html div设置有空隙,如何解决img标签下面的小空隙
  15. 清华贫困生的树洞,没有卖惨与诉苦,那股韧劲直抵人心
  16. 在线qq的html代码,网页QQ
  17. R语言可视化——画脸谱图
  18. 【顿悟】会者定离,一期一祈,勿怀忧也,世相如是.
  19. OSPF虚链接的基本配置
  20. 计算机网络英文论文,计算机网络与因特网论文(英文版).doc

热门文章

  1. php 竞拍系统,在线竞拍系统的PHP实现框架
  2. 创业公司融资PPT模板
  3. openstack-云平台镜像制作-centos-win2k16
  4. 洛谷P4383 [八省联考2018]林克卡特树
  5. 工业检测:基于密集尺度特征融合像素级不平衡学习框架(论文下载)
  6. 数据分析-回归分析读书笔记
  7. windows环境下MySQL服务端和客户端安装,超详细
  8. 抖音矩阵号系统搭建之企业号私信功能开发
  9. 使用 ULN2003 驱动 28BYJ-48 步进电机
  10. 浅议3G时代的移动互联网业务