Swap(交换函数)
交换两个变量的值
定义一个中间变量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(交换函数)相关推荐
- Java实现swap交换函数的数组方法
Java实现swap交换函数的数组方法 public class fun_1 {//定义数组类型的函数static int[] swap(int a,int b){int t =a;a =b;b =t ...
- 一个简单的swap交换函数
基础比我想得重要,一不注意就出错了,而且真的不好找--今天就犯了一大打错,写交换函数的时候写错了,沉重的打击了我幼小的心灵--哎,是这样的. //这是一种错误的写法,形参传进来的是实参的地址,temp ...
- c语言 swap交换函数_C语言经典100题(14)
1 上期答案揭晓 首先给大家看看上一篇文章C语言经典100题(13)中第三部分编程题的答案: #includeint main(){ int i,x,y,z; for(i=100;i<1000; ...
- c语言 swap交换函数_重审C中老生常谈的swap函数交换数值
概览 本文内容是关于C语言参数传值,以及x86底层实现的计算机科学. 包含了原理速览以及代码示例. 引言 如果你学习过C,可能会对经典的swap函数问题记忆深刻.简单的参数传值并不能在函数外部完成两个 ...
- 指针 Swap交换函数
@努力的张张 的C#练习 数组 指针地址传递 Swap函数 首先,我们先来看一下普通值传递和地址传递的区别 函数间普通值传递 上代码: #include<stdio.h> #include ...
- C语言 用宏函数实现 swap() 交换函数
函数功能: 交换任意两个同类型的数 函数一: #include <stdio.h> /** 运行环境:MinGW 和 MSVC 都可用* *//** 这里添加 do-while 循环是为了 ...
- C++中的swap(交换函数)
C++中的swap(交换函数) 交换两个变量的值很简单. 比如 int a = 1; b = 2; 交换a b的值 这个很简单 很容易想到的是找个中间变量比如 int temp = a; a = ...
- python交换函数_python a,b = b,一个实现?它与C ++交换函数有何不同?
当我想尝试以下版本的python版本时遇到了这个问题:https : //leetcode.com/problems/first-missing- positive/discuss/17071/My- ...
- 指针:调用自定义交换函数,完成三个数整从小到大排列
Description 调用自定义交换函数swap(int *p1, int *p2),完成三个整数从小到大排列 Input 多组测试数据,每组输入三个任意整数 Output 输出从小到大排列的三个数 ...
- 【引用】mkswap 把一个分区格式化成为swap交换区
mkswap /dev/sda* //创建此分区为swap 交换分区 swapon /dev/sda* //加载交换分区 swapoff /dev/sda* //关闭交换分区: 若想要开机自动挂载: ...
最新文章
- scrapy软连接失效和pip软连接失效
- $.ajax返回的JSON格式的数据后无法执行success的解决方法
- activex for chrome 网银助手_这 10 款插件让你的 Chrome 更好用
- java学习-http中get请求的非ascii参数如何编码解码探讨
- 【Notes7】Samba/NFS服务器,Ntp,导出log,modprobe,进入ME刷bios,树莓派
- 微服务架构下的组件需求
- javaweb----三层架构
- 【2018.3.10】模拟赛之三-ssl2576 平台
- PHP正则匹配Html内容,并通过浏览器弹框下载Excel
- 网易云音乐java爬虫_用Java实现网易云音乐爬虫
- freeswitch 改用mysql_freeswitch和Mysql
- 沈阳城市建设学院计算机2019,沈阳城市建设学院2019-2020年校历及寒假放假时间安排,什么时候放寒假...
- 解决uniapp编译为微信小程序以后vender.js的文件过大的问题
- 2021-09-03 Elasticsearch基操
- CTF·WEB入门之路
- Python:启程 数据分析-牛客网在线编程-中级函数12-23
- iOS rtmp 摄像头/录屏直播以及观看
- 产品运营:如何激活沉默用户
- Ubuntu中给手机安装apk文件
- CobaltStrike二次开发环境准备以及免杀