@努力的张张 的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()函数

指针 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. C语言 用宏函数实现 swap() 交换函数

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

  6. 《C Primer Plus》—第九章:函数(指针间接,函数及其定义方式,ANSI C原型,递归,函数调用的底层原理)

    文章目录 函数 本章内容 复习函数 创建并使用简单函数 分析程序 函数参数 定义带形式参数的函数 声明带形式参数函数的原型 调用带实际参数的函数 使用return从函数中返回值 函数类型 ANSI C ...

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

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

  8. C语言 | 编写一个使用指针的c函数,交换数组a和数组b中的对应元素

    ================================================ 博主github:https://github.com/MichaelBeechan 博主CSDN:h ...

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

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

最新文章

  1. 【力扣网练习题】合并两个有序链表
  2. 转载:asp.net生成缩略图通用函数(支持多种生成方式)
  3. Ubuntu系统(一)-安装篇
  4. Postfix用户收发控制
  5. docker容器内开启22 ssh_在docker容器中开启ssh服务 (未成功有时间再验证)
  6. OpenSceneGraph 笔记–如何导出三角形数据
  7. 移动web时代已开启:腾讯X5内核浏览服务
  8. Vim/Vi实用技巧(第二版)
  9. lwip连续发数据卡死_LwIP用TCP连接方式在数据量比较大协议栈卡死
  10. 小帅小胖智能机器人价格_小胖机器人CEO魏然:机器人+教育,是未来教育大势所趋...
  11. World Leading!世界第二!百度云在吹牛?
  12. hdu 2896 AC自动机
  13. Python Imaging Library: ImageFile Module(图像文件模块)
  14. html textarea粘贴事件,javascript在textarea中捕获粘贴事件
  15. android Fragment详解三:实现Fragment的界面
  16. arm b bl 地址无关码_海边同居有甜有虐,又一部BL日剧来了
  17. oracle存储过程导出scv文件
  18. python问卷调查数据分析_如何用excel统计调查问卷
  19. Python数据处理 | 批量提取文件夹下的csv文件,每个csv文件根据列索引提取特定几列,并将提取后的数据保存到新建的一个文件夹
  20. UWP-Naïve Media Player 2.0

热门文章

  1. Xavier/Tx2镜像拷贝及系统克隆
  2. codeforces 14E. Camels(多维dp)
  3. 电商网站如何进行库存同步处理Redis+Lua
  4. stm32之中断系统
  5. Samba文件服务器
  6. XSS跨站脚本攻击(level1-10)
  7. 受限玻尔兹曼机(RBM)学习笔记(四)对数似然函数
  8. Sonya and Matrix Beauty
  9. JDK1.6“新“特性Instrumentation之JavaAgent
  10. 在openSUSE-Leap-15.2-DVD-x86_64下使用VLC媒体播放器