交换两个变量的值

定义一个中间变量tmp,可实现交换

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

现将用Swap函数来实现交换

错误形式1:

​void Swap(int a, int b) //error c传值,形参的改变不会影响实参
{int tmp = a;a = b;b = tmp;
}int main()
{int a = 10;int b = 20;printf("%d,%d\n",a,b);Swap(a, b);printf("%d,%d\n", a, b);return 0;
}

不能实现交换

如图可知:

主函数中a的地址为0x008ff9ec

b的地址为0x008ff9e0

Swap函数中a的地址为0x008ff908

b的地址为0x008ff90c

a,b地址不同,即为在两个不同的函数空间中,凑巧出现两个同名变量

错误形式2:

void Swap(int* p1, int* p2)//error,没有解引用
{int* tmp;tmp = p1;p1 = p2;p2 = tmp;
}
int main()
{int a = 10;int b = 20;printf("%d,%d\n",a,b);Swap(&a, &b);printf("%d,%d\n", a, b);return 0;
}

不能实现交换

如图可知:

主函数中a的地址为0x00f5fde8

b的地址为0x00f5fddc

Swap函数中p1的地址为0x00f5fde8

p2的地址为0x00f5fddc

两地址相同,即p1->a,p2->b,提供了可能性

但缺少解引用,不能从p1到a,p2到b

错误形式3:

void Swap(int* p1, int* p2)//error,对野指针进行解引用
{int* tmp;//tmp里面是随机值*tmp = *p1;//编译出错或者崩溃,对野指针进行解引用*p1 = *p2;*p2 = *tmp;
}

编译错误

对野指针进行解引用

野指针(也称悬空/悬挂指针),没有访问权限的地址(指针)

(1)地址本身无效/不存在

(2)地址存在但无访问权限

tmp为野指针,未被初始化,里面为随机值,意味着指针指向了一个地址是不确定的变量,对其解引用就是去访问了一个不确定的地址,结果不可知

正确形式:

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

如图可知

主函数中a的地址为0x006ffcc0

b的地址为0x006ffcb4

Swap函数中p1的地址为0x006ffcc0

p2的地址为0x006ffcb4

两地址相同,即p1->a,p2->b

定义一个整型的tmp,实现两个变量的交换

A函数调用B函数,如果需要通过B函数修改A中实参的值,则必须传指针,在B中解引用

Swap(交换函数)相关推荐

  1. Java实现swap交换函数的数组方法

    Java实现swap交换函数的数组方法 public class fun_1 {//定义数组类型的函数static int[] swap(int a,int b){int t =a;a =b;b =t ...

  2. 一个简单的swap交换函数

    基础比我想得重要,一不注意就出错了,而且真的不好找--今天就犯了一大打错,写交换函数的时候写错了,沉重的打击了我幼小的心灵--哎,是这样的. //这是一种错误的写法,形参传进来的是实参的地址,temp ...

  3. c语言 swap交换函数_C语言经典100题(14)

    1 上期答案揭晓 首先给大家看看上一篇文章C语言经典100题(13)中第三部分编程题的答案: #includeint main(){ int i,x,y,z; for(i=100;i<1000; ...

  4. c语言 swap交换函数_重审C中老生常谈的swap函数交换数值

    概览 本文内容是关于C语言参数传值,以及x86底层实现的计算机科学. 包含了原理速览以及代码示例. 引言 如果你学习过C,可能会对经典的swap函数问题记忆深刻.简单的参数传值并不能在函数外部完成两个 ...

  5. 指针 Swap交换函数

    @努力的张张 的C#练习 数组 指针地址传递 Swap函数 首先,我们先来看一下普通值传递和地址传递的区别 函数间普通值传递 上代码: #include<stdio.h> #include ...

  6. C语言 用宏函数实现 swap() 交换函数

    函数功能: 交换任意两个同类型的数 函数一: #include <stdio.h> /** 运行环境:MinGW 和 MSVC 都可用* *//** 这里添加 do-while 循环是为了 ...

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

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

  8. python交换函数_python a,b = b,一个实现?它与C ++交换函数有何不同?

    当我想尝试以下版本的python版本时遇到了这个问题:https : //leetcode.com/problems/first-missing- positive/discuss/17071/My- ...

  9. 指针:调用自定义交换函数,完成三个数整从小到大排列

    Description 调用自定义交换函数swap(int *p1, int *p2),完成三个整数从小到大排列 Input 多组测试数据,每组输入三个任意整数 Output 输出从小到大排列的三个数 ...

  10. 【引用】mkswap 把一个分区格式化成为swap交换区

    mkswap /dev/sda* //创建此分区为swap 交换分区 swapon /dev/sda* //加载交换分区 swapoff /dev/sda* //关闭交换分区: 若想要开机自动挂载: ...

最新文章

  1. scrapy软连接失效和pip软连接失效
  2. $.ajax返回的JSON格式的数据后无法执行success的解决方法
  3. activex for chrome 网银助手_这 10 款插件让你的 Chrome 更好用
  4. java学习-http中get请求的非ascii参数如何编码解码探讨
  5. 【Notes7】Samba/NFS服务器,Ntp,导出log,modprobe,进入ME刷bios,树莓派
  6. 微服务架构下的组件需求
  7. javaweb----三层架构
  8. 【2018.3.10】模拟赛之三-ssl2576 平台
  9. PHP正则匹配Html内容,并通过浏览器弹框下载Excel
  10. 网易云音乐java爬虫_用Java实现网易云音乐爬虫
  11. freeswitch 改用mysql_freeswitch和Mysql
  12. 沈阳城市建设学院计算机2019,沈阳城市建设学院2019-2020年校历及寒假放假时间安排,什么时候放寒假...
  13. 解决uniapp编译为微信小程序以后vender.js的文件过大的问题
  14. 2021-09-03 Elasticsearch基操
  15. CTF·WEB入门之路
  16. Python:启程 数据分析-牛客网在线编程-中级函数12-23
  17. iOS rtmp 摄像头/录屏直播以及观看
  18. 产品运营:如何激活沉默用户
  19. Ubuntu中给手机安装apk文件
  20. CobaltStrike二次开发环境准备以及免杀

热门文章

  1. 网络、域名、DNS、A记录以及MX记录的基本概念
  2. 190824-英雄联盟传记爬取
  3. ParNew回收器和Parallel Scavenge回收器介绍
  4. 一次性计时器和间隔性计时器的实现
  5. pytorch求解高维空间PDE
  6. eclipse IED的优化(gc.log)
  7. Microsoft Surface
  8. 解决VAX 2210 不能识别 VS2017的问题
  9. oracle rac实现,炼数成金Oracle 12C RAC集群原理与管理实战 16课
  10. 罗马音平假字复制_全部日文平假字翻译