指针 Swap交换函数
@努力的张张 的C#练习
数组 指针地址传递 Swap函数
首先,我们先来看一下普通值传递和地址传递的区别
- 函数间普通值传递
上代码:
#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)使用野指针(野指针,悬挂指针,你不能访问,可能有地址不能访问,也可能是不存在的地址)
#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()函数
指针 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函数问题记忆深刻.简单的参数传值并不能在函数外部完成两个 ...
- C语言 用宏函数实现 swap() 交换函数
函数功能: 交换任意两个同类型的数 函数一: #include <stdio.h> /** 运行环境:MinGW 和 MSVC 都可用* *//** 这里添加 do-while 循环是为了 ...
- 《C Primer Plus》—第九章:函数(指针间接,函数及其定义方式,ANSI C原型,递归,函数调用的底层原理)
文章目录 函数 本章内容 复习函数 创建并使用简单函数 分析程序 函数参数 定义带形式参数的函数 声明带形式参数函数的原型 调用带实际参数的函数 使用return从函数中返回值 函数类型 ANSI C ...
- 指针:调用自定义交换函数,完成三个数整从小到大排列
Description 调用自定义交换函数swap(int *p1, int *p2),完成三个整数从小到大排列 Input 多组测试数据,每组输入三个任意整数 Output 输出从小到大排列的三个数 ...
- C语言 | 编写一个使用指针的c函数,交换数组a和数组b中的对应元素
================================================ 博主github:https://github.com/MichaelBeechan 博主CSDN:h ...
- C++中的swap(交换函数)
C++中的swap(交换函数) 交换两个变量的值很简单. 比如 int a = 1; b = 2; 交换a b的值 这个很简单 很容易想到的是找个中间变量比如 int temp = a; a = ...
最新文章
- 【力扣网练习题】合并两个有序链表
- 转载:asp.net生成缩略图通用函数(支持多种生成方式)
- Ubuntu系统(一)-安装篇
- Postfix用户收发控制
- docker容器内开启22 ssh_在docker容器中开启ssh服务 (未成功有时间再验证)
- OpenSceneGraph 笔记–如何导出三角形数据
- 移动web时代已开启:腾讯X5内核浏览服务
- Vim/Vi实用技巧(第二版)
- lwip连续发数据卡死_LwIP用TCP连接方式在数据量比较大协议栈卡死
- 小帅小胖智能机器人价格_小胖机器人CEO魏然:机器人+教育,是未来教育大势所趋...
- World Leading!世界第二!百度云在吹牛?
- hdu 2896 AC自动机
- Python Imaging Library: ImageFile Module(图像文件模块)
- html textarea粘贴事件,javascript在textarea中捕获粘贴事件
- android Fragment详解三:实现Fragment的界面
- arm b bl 地址无关码_海边同居有甜有虐,又一部BL日剧来了
- oracle存储过程导出scv文件
- python问卷调查数据分析_如何用excel统计调查问卷
- Python数据处理 | 批量提取文件夹下的csv文件,每个csv文件根据列索引提取特定几列,并将提取后的数据保存到新建的一个文件夹
- UWP-Naïve Media Player 2.0
热门文章
- Xavier/Tx2镜像拷贝及系统克隆
- codeforces 14E. Camels(多维dp)
- 电商网站如何进行库存同步处理Redis+Lua
- stm32之中断系统
- Samba文件服务器
- XSS跨站脚本攻击(level1-10)
- 受限玻尔兹曼机(RBM)学习笔记(四)对数似然函数
- Sonya and Matrix Beauty
- JDK1.6“新“特性Instrumentation之JavaAgent
- 在openSUSE-Leap-15.2-DVD-x86_64下使用VLC媒体播放器