指针 Swap交换函数

2023-05-16

@努力的张张 的C#练习

数组 指针地址传递 Swap函数

首先,我们先来看一下普通值传递和地址传递的区别

  1. 函数间普通值传递
    上代码:
#include<stdio.h>
#include<stdlib.h>
void Swap1(int p1,int p2)
{
	int t=p1;
	p1=p2;
	p2=t;
}
int main()
{
	int a;
	int b;
	a=10;
	b=20;
	Swap1(a,b);
	printf("%d %d\n",a,b);
	return 0;
}

运行结果:
在这里插入图片描述
结果分析:
我们知道,变量名可以相同,但他们的存储地址一定是唯一的,所以,查看一下Swap中的p1,p2和main中的a,b地址;
在这里插入图片描述
在这里插入图片描述
可以看到,这两组变量之间除了值相同外,地址是完全不同的,而想要改变某一变量,是一定要到变量地址单元去的,因此,即使在Swap1函数中交换了p1,p2的值,实际上对实参a,b没有任何影响。

  1. 通过指针进行地址传递
    (1)使用野指针(野指针,悬挂指针,你不能访问,可能有地址不能访问,也可能是不存在的地址)
#include<stdio.h>
#include<stdlib.h>
void Swap2(int *p1,int *p2)
{
	int *t=p1;
	p1=p2;
	p2=t;
}
int main()
{
	int a;
	int b;
	a=10;
	b=20;
	//Swap1(a,b);
	Swap2(&a,&b);
	printf("%d %d\n",a,b);
	return 0;
}

运行结果:
在这里插入图片描述
结果分析:
在这里插入图片描述
可以看到,p1,p2指针确实指向了a,b,但是只通过指针t交换了Swap2中的p1和p2的地址指向,实际a,b并没有变化,这是因为没有解引用,并未真正去到a,b的存储单元去。并且在这里的t指针是个野指针,是很危险的存在,是不能够访问的,所以此段代码也非常不安全。

(2)使用指针,且解引用
代码:

#include<stdio.h>
#include<stdlib.h>
void Swap3(int *p1,int *p2)
{
	int t=*p1;
	*p1=*p2;
	*p2=t;
}
int main()
{
	int a;
	int b;
	a=10;
	b=20;
	//Swap1(a,b);
	//Swap2(&a,&b);
	Swap3(&a,&b);
	printf("%d %d\n",a,b);
	return 0;
}

运行结果:
在这里插入图片描述
结果分析:
在这里插入图片描述
可以看到,成功交换了a,b。

结论

在一个函数中想要修改另一个函数中的变量,必须使用指针,而且要解引用!
e.g scanf()函数

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

指针 Swap交换函数 的相关文章

  • Ubuntu 增加swap交换内存

    一 创建虚拟内存 在实际开发中发现swap交换分区不够用了 xff0c 于是需要创建虚拟内存来增加交换分区的大小 在系统空闲空间位置创建swap虚拟内存专用文件夹 cd data 切到你想要创建交换分区的目录 mkdir swap 新建文件
  • Linux虚拟机vmware中使用gparted调整磁盘大小并设置swap分区

    1 首先把vmware中的linux关机 xff0c 然后打开设置 gt 硬盘 gt 扩展 xff1a 2 打开Gparted应用 xff0c 你可以看到已分配分区状况和新增未分配的分区 xff08 如果无此应用的话 xff0c 先安装 x
  • 【C++】vector释放内存之swap方法

    C 43 43 vector 容器浅析 在容器vector中 xff0c 其内存占用的空间是只增不减的 xff0c 比如说首先分配了10 000个字节 xff0c 然后erase掉后面9 999个 xff0c 则虽然有效元素只有一个 xff
  • 如何在 Debian 10 Linux 上添加交换空间

    交换空间是磁盘上的空间 当物理内存已满时使用 当 Linux 系统耗尽 RAM 时 非活动页面将从 RAM 移至交换空间 交换空间可以采用专用交换分区或交换文件的形式 通常 运行 Debian 虚拟机时不存在交换分区 因此唯一的选择是创建交
  • 如何在 Linux 中创建交换文件

    交换文件是 Linux 操作系统的重要组件 它通过提供额外的虚拟内存来帮助提高性能 它是在系统物理内存 RAM 填满时保留用作虚拟内存的磁盘空间 在 Linux 中创建交换文件有助于防止系统崩溃和不稳定 在本文中 我们将逐步讨论如何在 Li
  • 【Linux】Linux中Swap与Memory内存简单介绍

    背景介绍 对于Linux来说 其在服务器市场的使用已经占据了绝对的霸主地位 不可动摇 Linux的各种设计思想和使用也被传承 当然不乏各种黑Linux 而且黑的漂亮 Linux的很多独特的设计 对性能也产生了巨大的提升 也为其他应用软件和系
  • 如何在 Debian 9 上添加交换空间

    交换空间是磁盘上的空间 当物理 RAM 内存已满时使用 当 Linux 系统耗尽 RAM 时 非活动页面将从 RAM 移至交换空间 交换空间可以采用专用交换分区或交换文件的形式 通常 运行 Debian 虚拟机时不存在交换分区 因此唯一的选
  • 在Python中交换列表中的元素

    我有一个列表 我需要将列表中的第一个元素与列表中的最大元素交换 但为什么代码 1 可以工作 而代码 2 却不能 code 1 a list index max list list 0 list a list a list 0 code 2
  • Javascript:如何交换对象数组的元素(通过引用,而不是索引)?

    我有一个对象数组a v 0 v 1 v 2 v 3 我没有index进入数组 但我确实有参考我想交换的两个值 s1 a 2 s2 a 3 如何使用这些引用来交换实际数组的元素 s1 s2 s2 s1 only swaps s1 and s2
  • 是否可以交换两个变量的地址?

    我知道可以像这样交换两个变量的值 include
  • 标准库如何实现std::swap?

    STL中的swap函数是如何实现的 是不是就这么简单 template
  • 如何将数组列表中的特定项目移动到第一项

    例如 一个列表 A B C D E 给定 C 切换到 甲乙二胺 请注意 数组大小会发生变化 某些项目可能会在运行时删除 Collections swap url url indexOf itemToMove 0 该语句不起作用 因为它输出
  • 哪种方式交换两个变量值更优化?

    这些方法是关于在 javaScript 中交换两个变量的 方法一 var a 0 b 1 c a a b b c 方法二 var a b 0 1 a b b a 这里你可以自己看看 改变NUMBER OF TIMES如你所愿 还可以根据需要
  • 使用 Ionic 框架将 html 文件的内容嵌入到另一个 html 页面?

    我目前正在创建一个网站使用离子框架 http ionicframework com左侧有一个侧边栏 用户可以单击某个项目转到网站的另一个页面 现在我必须将侧边栏的代码复制到每个页面 这是没有用的 也不是可行的方法 所以我的问题是是否可以将
  • 再次使用该值作为索引以避免局部变量时列表交换两个元素失败

    l1 0 2 1 index 1 from ipdb import set trace set trace l1 index l1 l1 index l1 l1 index l1 index print l1 为什么会l1是相同的 l1 1
  • 交换 jQuery 中的两个元素

    我正在尝试使用向上和向下箭头交换两个元素 JSFiddle 解决方案会很棒 My HTML div class item div class content Some text div div class move div class mo
  • 如何对链表进行排序?

    我有一个链接列表 我想按特殊顺序对其进行排序 我尝试使用冒泡排序 由于我的结构 称为 Node 中有许多数据类型 因此我无法交换这些值 struct Node int data Node next Node int x data x nex
  • 字符串交换适用于 char **,但不适用于 char *

    在这个程序中我交换了前两个名字 include
  • 与右值交换

    假设我想要swap它适用于右值 并且不想为右值 左值引用的所有组合编写 4 个版本 右值 右值版本有点毫无意义 但也无害 我想出了这个 template
  • 异或交换可以扩展到两个以上的变量吗?

    我一直在尝试将异或交换扩展到两个以上的变量 例如n变量 但我没有得到比这更好的地方3 n 1 对于两个整型变量x1 and x2你可以像这样交换它们 swap x1 x2 x1 x1 x2 x2 x1 x2 x1 x1 x2 所以 假设你有

随机推荐

  • CSS实现进度条和订单进度条

    由于近期需要做一个订单进度条 xff0c 比较直观的反应当前订单的状态 xff0c css样式借鉴了网上的相关代码 xff0c 下面是效果图 xff0c 以及实现说明 一 说明 1 首先页面需要引入jQuery的相关js 一般页面都已经引入
  • ROS中CANopen的使用(1)

    ROS中CANopen的使用 xff08 1 xff09 今天终于实现了通过ros来控制无人车 xff0c 心情非常激动 xff0c 先简要记录 工作环境 工控机使用的Ubuntu18 02 xff0c can卡采用的innodisk的UC
  • 组合导航在ROS中的解析(2)

    工作环境 ubuntu18 02 xff0c 组合导航使用网口接口 xff0c ros使用melodic实现过程 include lt ros ros h gt include lt stdio h gt include lt stdlib
  • 上位机与下位机进行交互

    一 上位机与下位机 xff08 1 xff09 什么是上位机 上位机是指可以直接发出操控命令的计算机 这里使用的是winfrom xff08 2 xff09 什么是下位机 下位机是指直接控制设备获取状况的计算机 xff0c 一般是PLC 单
  • alist无法访问文件 提示“failed get link ”这样修复

    阿里网盘挂载alist无法访问文件 xff0c 提示 failed get link invalid X Device Id xff1f 34 Failed get link invalid X Device Id 34 是挂载阿里云网盘到
  • STM32F4应用-串口通信

    STM32F4应用 串口通信 1 基本介绍1 1 简介1 2 串口协议1 3 通信过程 2 配置过程2 1 引脚复用2 2 配置步骤2 3 例子 参考文献 1 基本介绍 1 1 简介 串口通信涉及USART TX RX xff0c GND三
  • 使用ADB命令来停用、卸载荣耀20 PRO的系统应用

    今年双十一买了部荣耀20 Pro手机 xff0c 某天感觉某个系统应用 系统更新 贼烦人 xff0c 过段时间就提醒一次 xff1b 我就被逼着上网搜有没有思路 xff0c 然后就打开了罪恶的大门 个人博客 xff1a https blog
  • Python笔记【二】

    之前分享过一次我在学习Python的笔记 xff0c Python笔记 一 xff0c 最近有些新的收获 xff0c 分享一下 xff1b 个人博客 xff1a https blog csdn net zyooooxie random sa
  • Fiddler 使用命令行和Filters

    本文为博主原创 xff0c 未经许可严禁转载 本文链接 xff1a https blog csdn net zyooooxie article details 109020837 之前分享过一期 Fiddler断点 修改响应数据 xff0c
  • 代码改变生活-使用You-Get下载bilibili的视频【一】

    本文为博主原创 xff0c 未经许可严禁转载 本文链接 xff1a https blog csdn net zyooooxie article details 111307733 这篇分享是我在csdn的第100篇原创了 xff0c 真的是
  • Appium app自动化测试经验分享-find_element_by_android_uiautomator ()【二】

    本文为博主原创 xff0c 未经许可严禁转载 本文链接 xff1a https blog csdn net zyooooxie article details 113868447 之前分享过 find element by android
  • 数据完整性测试之【三】Redis缓存和数据库表里的记录

    本文为博主原创 xff0c 未经授权 xff0c 严禁转载及使用 本文链接 xff1a https blog csdn net zyooooxie article details 119377944 前面分享过 接口返回值 和 表记录 的校
  • Python笔记【十一】

    本文为博主原创 xff0c 未经授权 xff0c 严禁转载及使用 本文链接 xff1a https blog csdn net zyooooxie article details 123655926 继续学习Python xff0c 继续更
  • Python脚本之准备测试环境的用户数据

    本文为博主原创 xff0c 未经授权 xff0c 严禁转载及使用 本文链接 xff1a https blog csdn net zyooooxie article details 127645678 这期是讲述下 我准备测试环境用户数据的经
  • 1114Selenium web自动化测试经验分享-设置网页超时加载时间set_page_load_timeout()

    最开始学习web自动化测试就遇到一个小困扰 xff0c 有时候设计的用例可能会打开新浪 腾讯这些网站 xff0c 等待网页加载完成都要小半分钟 最近重拾web自动化测试 xff0c 又遇到这个困扰 个人博客 xff1a https blog
  • 1127UI自动化测试经验分享-显式等待(一)WebDriverWait类、until()方法

    最近忙于其他事情 xff0c 博客就没那么多时间来写 原本想先分享下三种等待方式 xff0c 但是隐式等待我还有点不太懂 这次先分享显式等待 个人博客 xff1a https blog csdn net zyooooxie 一 xff09
  • OpenCV框架介绍

    OpenCV框架介绍 概述 OpenCV是一个开放源代码的计算机视觉应用平台 xff0c 由英特尔公司下属研发中心俄罗斯团队发起该项目 xff0c 开源BSD证书 xff0c OpenCV的目标是实现实时计算机视觉 xff0c xff0c
  • 1128UI自动化测试经验分享-显式等待(二)expected_conditions模块、visibility_of_element_located(locator)

    expected conditions模块 提供的预期条件判断类 模块包含一套预定义的条件集合 xff0c 大大方便了 WebDriverWait 的使用 个人博客 xff1a https blog csdn net zyooooxie 一
  • Requests.request()方法分享【一】

    最近参加了一次新公司测试团队技术分享会 xff0c 有大佬分享了关于接口自动化框架 python 43 requests 43 ddt 43 unittest 43 jenkins xff0c 印象很深刻的是他的脚本测试用例的设计和requ
  • 指针 Swap交换函数

    64 努力的张张 的C 练习 数组 指针地址传递 Swap函数 首先 xff0c 我们先来看一下普通值传递和地址传递的区别 函数间普通值传递 上代码 xff1a span class token macro property span cl