C语言第5章指针和一维数组.ppt

2019/11/5,第5章 指针与一维数组,软件学院计算机科学与技术教研室 冯海文 fhw19770704,2019/11/5,5.1 指针的概念与运算,C语言继承了高级语言的内存管理机制,但也还给了编程者一定程度的自主权。,汇编语言程序里使用的数据存放在内存的什么位置等需要编程者自己决定。,权限大,复杂和危险,高级语言不允许编程者直接操作内存,由系统决定内存单元的大小以及在内存区中的位置,安全,权限小,钥匙指针,2019/11/5,5.2 指针做函数的参数,第4章的函数参数可以是整数、浮点数和字符,可以是指针么,答案是可以。,要点, 参数对应,形参和实参都是指针,基类型一致,例 53 函数的指针参数。 void f(int*p) Printf(“P”,p); void main( ) int x; float y; f( ,2019/11/5,5.2 指针做函数的参数,指针做函数的参数的作用,传递地址。,要点, 利用指针做函数的参数能实现形参影响实参的作用。,用TurboC举例利用函数传递指针实现交换两个变量的值。,2019/11/5,5.2 指针做函数的参数,要点, 利用指针做函数的参数能实现返回多个返回值的功能。,用TurboC举例编写一个函数返回一个数的平方和立方。,通过return最多能返回一个值,2019/11/5,5.3 一维数组,定义变量解决了个别数据的存储问题,当有大量的数据需要存储时应如何处理呢,答案是定义数组。, 数组是存储同一种类型数据的有序集合。定义一个数组可以替代定义大量的变量,从而降低程序设计的复杂性。, 在后续的C、Java等语言中,还有其它的解决大量数据的存储工具,如vector向量、list列表和queue队列等。,2019/11/5,一维数组的定义,5.3 一维数组,类型符 数组名元素个数;,char a10;,要点,数组名 一个合法的标识符,类型符 说明元素的类型,元素个数 常量表达式,存储属性 可以用auto、static、 extern修饰,一维数组的定义,语法,2019/11/5,5.3 一维数组,一维数组的引用,一维数组的引用,double a8; 元素为a0a7,数组名下标;,a8,1. 元素表示,2. 数组元素是普通变量,便于循环操作。 数组元素总是占用连续的内存区。,a3、a5都是double变量; a2为变量的地址。,语法,2019/11/5,5.3 一维数组,一维数组的引用,include void main int a10,k; fork0; k10; k scanf“d”, ,2019/11/5,5.3 一维数组,一维数组的引用,C语言不做数组边界检查,是常见的严重错误之一。,int b10; b10 3;超界的数组,x b9 b8 b7 .,b10 b10xX很生气,后果很严重X我的家被b10占了,3. 数组边界,2019/11/5,定义时的初始化,5.3 一维数组,定义时的初始化,类型 数组名长度 值1,值2值n;,语法,形式,按顺序对元素赋以初值。 int a8 2,5,6,9,4,2,3,9; char b5H,e,l,l,o;,不完全初始化。 int a8 2,5,6,9;,由系统自测数组长度。 int a5 -1,0,1,3,4; int a -1,0,l,3,4;,a6 int a50;,2019/11/5,5.3 一维数组,定义时的初始化,问题在未初始化时,每个元素的值是多少 int a5;,include void main int a3 1, 2, i, j; fori0; i3; i forj0; j3; j ai aj1; printf“nd”, a1; ,2019/11/5,5.3 一维数组,一维数组应用示例,一维数组应用示例,通常,数组不能作为整体使用,只能逐个访问其元素。 数组元素的下标表示为利用循环语句来访问数组带来了便利。,常识,2019/11/5,5.3 一维数组,一维数组应用示例,从键盘接收10个浮点数,计算并输出它们的最大值和最小值。例5.9,伪程序描述,include void main 定义一个长度为10的一维数组; 定义临时最大、最小值变量max和min; 循环输入10个数,保存到数组; fork0; k10; k 比较并更新临时最大最小元素; 输出结果; ,2019/11/5,5.3 一维数组,一维数组应用示例,梗概,用选择排序法将10个数按由小到大的次序排序。例5.10,对n个元素做n-1次扫描处理 第1次扫描通过n-1次比较,从n个数据中找出最小元素,将它与第1个元素交换; 第2次扫描通过n-2次比较,从后n-1个数据中找出最小n个元素中的次小元素元素,将它与第2个元素交换; . 第n-1次扫描在最后2个元素中找出最小元素并交换到首位置。排序结束。 显然,需要2层循环来实现。,2019/11/55.3 一维数组,一维数组应用示例,过程演示,初始49 38 65 97 76 13,结果13 38 49 65 76 97,13,38,49,65,76,2019/11/5,5.3 一维数组,一维数组应用示例,伪程序描述,include void main 定义数组a和相关变量; 循环输入数组元素值; fork0; kn-1; k 找akan-1中的 最小元素下标min; 若需要,交换ak与amin; 输出数组元素排序结果; ,2019/11/5,5.4 数组与指针的关系,用指针操纵一维数组,要点,数组元素在内存中连续存放,知道第一个元素的地址就可以顺次得到其它元素地址,实现对所有数组元素的间接访问。,示例,double a10; 第一个元素变量a0 第一个元素地址a0,第k个元素变量a0k 第k个元素间接引用*a0k,ak,*ak,2019/11/5,5.4 一维数组与指针的关系,用指针操纵一维数组,输入示例,fork0; k10; k scanf“lf”, 用指针变量double* p ,2019/11/5,5.4 一维数组与指针的关系,用指针操纵一维数组,输出示例fork0; k10; k printf“lf”, ak; fork0; k10; k printf“lf”, *,double* p ,2019/11/5,数组名代表指针常量,5.4 一维数组与指针的关系,数组名代表指针常量,要点,C语言对一维数组名有如下约定 数组名代表一个指针; 指针指向数组的第一个元素; 基类型数组元素类型。,思考,double a10; 定义数组,a是指向a0的指针,基类型为double。因此,a与a0含义、用法完全相同,但书写简单。,2019/11/5,5.4 一维数组与指针的关系,数组名代表指针常量,示例,double a 4, 2, 3, 9; fork0; k4; k scanf“lf”, ,double* p a; fork0; k4; k printf“lf”, ak;,问题为什么不使用*a,2019/11/5,5.4 一维数组与指针的关系,数组名代表指针常量,不能采用*a的原因是a是常量而非变量,这是容易被忽略的问题。,典型错误,a a a *a,重点问题,问题*a 5与a 5有何不同,2019/11/5,5.4 一维数组与指针的关系,数组名代表指针常量,小节,一个量的多种表示法,double a10, *p a;指向数组中第k个元素的指针,ak、a0k、ak、pk数组中第k个元素,ak、*a0k、*ak、*pk、ak0,2019/11/5,指针与数组的一致性,5.4 一维数组与指针的关系,指针与数组的一致性,相同写法,指针和数组都可以采用下标引用方法和间接引用方法。,int a3; int *p a; a1 2; *a1 2; p1 2; *p1 2;,强调,在p指向数组a时,a与p可以使用同样的形式表示地址和元素。 p是变量,值可变,但a是常量,值不可变。,2019/11/5,5.4 一维数组与指针的关系,指针与数组的一致性,在一个数组 a中查找一个指定的值 x是否存在,若存在则删除数组中第一次出现的对应元素,若不出现则什么也不做。例5.11,查到后,p指向中间某处,图 利用指针查找时的位置关系,2019/11/5,5.4 一维数组与指针的关系,指针与数组的一致性,伪程序描述,void main 定义数组a和相关变量x等; 输入数组元素和x的值; fork0; kn; k ifak x 删除元素ak; 输出数组元素; ,问题字符串时如何删除,2019/11/5,5.4 一维数组与指针的关系,指针与数组的一致性,小节,何时使用指针操纵数组, 在连续处理一个数组的元素时,可以定义一个指针变量p并赋以数组的首地址,利用*p形式访问数组元素,比直接使用数组下标更快。, 向函数传递数组时使用指针。,2019/11/5,5.5 在函数间传递一维数组,5.5 在函数间传递一维数组,传递一维数组的首地址和长度,要点,传递的是数组的首地址,数组是连续存放,通过首地址能够访问数组中每一个元素.,2019/11/5,5.5 在函数间传递一维数组,5.5 在函数间传递一维数组,形参与实参的一致性,形参,1直接按照数组定义方式 float x10 2)系统不做边界检查,省略长度 float x 3)传递的是指针,指针和数组通用 float *x;,实参,数组首地址 float a10; 1数组名是首地址 a 2)首地址 a0,形参和实参可以同名,2019/11/5,5.5 在函数间传递一维数组,5.5 在函数间传递一维数组,示例,includestdioh int funint x ,int n int i,rtl; for(i0;in;i) rt(xi ) return rt; void main() int a2,3,4,5,6,7,8,9; printf(“nd”,fun(a,3; ,形参的三种写法,数组下标法,2019/11/5,5.5 在函数间传递一维数组,5.5 在函数间传递一维数组,一维数组做函数参数的思考,要点,可以传递多个参数,上面的例子,可以得到多个返回值,利用return最多能得到一个返回值,传递一个指针能实现返回一个基类型数据,示例利用数组返回一个数二次方、三次方、10次方,2019/11/5,5.5 在函数间传递一维数组,5.5 在函数间传递一维数组,示例,二分法检索,查找过程每次将待查记录所在区间缩小一半 适用条件采用顺序存储结构的有序表 算法实现 设表长为n,low、high和mid分别指向待查元素所在区间的上界、下界和中点,k为给定值 初始时,令low1,highn,midlowhigh/2 让k与mid指向的记录比较 若krmid.key,查找成功 若krmid.key,则lowmid1 重复上述操作,直至lowhigh时,查找失败,2019/11/5,算法描述Ch7_2.c,

c语言指针与一维数组PPT,C语言第5章指针和一维数组.ppt相关推荐

  1. php 数组转对象_[基础编程学习] [PHP7数组详解]:第1章 (8)数组和对象

    # 1.14 数组 讲了7节了,终于说到重头戏了. 数组,将关联的数据,放在内存中. 举一个例子,比如说一个班级,有一个班级号,班级名,描述,房间号,教导员,班级人数.可以存到一个数组内,这样写: $ ...

  2. C语言研究性学习的路线之号外:一些朋友所提问题的反馈及第9章 指针

    首先感谢CSDN的朋友们,写本书困惑时总能受到你或TA的启发和指导,在此再次表示诚挚的感谢. C语言研究性学习的路线计划是本教材配套的学习或教学参考(教与学是一枚硬币的两面),在此发表为了记录,但也想 ...

  3. C语言字符型数组ppt,C语言第13讲指针与字符串(字符数组).ppt

    C语言第13讲指针与字符串(字符数组).ppt 6.2.3 指针与字符串(字符数组) C语言用字符数组存放字符串. 字符数组元素个数确定,一般用下标控制循环. 字符串有效字符个数由0确定,用结束符0控 ...

  4. c语言二维数组 ppt,C语言二维数组与指针.ppt

    C语言二维数组与指针.ppt 好好考,全国计算机等级考试 二级C语言,第12讲 二维数组与指针,二维数组的定义 数组元素的引用及初始化 二维数组和指针 二维数组名和指针数组作为实参 二维数组程序举例 ...

  5. c语言指针数组课件,C语言指针与数组教程课件.ppt

    C语言指针与数组教程;教学要求;本章主要内容;引子;#include void swap ( int x, int y ) { printf("调用时:x地址为:%p, 值为:%d\n&qu ...

  6. c语言程序设计 指针 .ppt,C语言程序设计 指针.ppt

    C语言程序设计 指针.ppt 第6章 指 针,C 语言程序设计,北京科技大学 计算机系,2018/8/156.1 概述6.2 指针和指针变量6.3 指针与数组6.4 指针和函数6.5 动态存储分配,第 ...

  7. C语言结构体与指针ppt,c语言指针和结构体:链表详解.ppt

    c语言指针和结构体:链表详解.ppt 1,第十一章 链表,2,例跳马.依下图将每一步跳马之后的位置x,y放到一个"结点"里,再用"链子穿起来",形成一条链,相邻 ...

  8. c语言中的字节和元素,C语言指向数组元素的指针

    指向数组元素的指针和运算法则 所谓指向数组元素的指针,其本质还是变量的指针.因为数组中的每个元素,其实都可以直接看成是一个变量,所以指向数组元素的指针,也就是变量的指针. 指向数组元素的指针不难,但很 ...

  9. 全国计算机二级考试c语言指针,全国计算机二级考试C语言 指针精讲课件.ppt

    全国计算机二级考试C语言 指针精讲课件 第七章:指 针;第一节:指针概述;如:执行以下说明语句后: int a=3,b=4; float c=4.5,d=8.6; char e='x',f='y';其 ...

最新文章

  1. java 封装 继承 堕胎_JAVA封装、继承、多态
  2. CVPR论文 | 所见所想所找:基于生成模型的跨模态检索
  3. [react] 如何给非控组件设置默认的值?
  4. mysql 的 sql 执行计划详解
  5. 阿里纳斯Adidas广告词
  6. linux ll命令时间,linux ll显示时间格式
  7. PMBOK第6版 项目管理过程组与知识领域(15至尊图)
  8. SSRF利用 Gopher |Gopher攻击mysql及内网
  9. Android 画指南针
  10. 《UNIX环境高级编程》(第3版)
  11. 有关Nodejs的视频教程
  12. 【攻防世界WEB】难度三星9分入门题(上):simple_js、mfw
  13. 程序员主流代码编辑器,你用过多少款?
  14. MySQL8 免安装版安装
  15. Anaconda——最省心的 Python 版本
  16. 一条命令实现树莓派摄像头直播推流哔哩哔哩
  17. Linux命令 - head命令
  18. Unity触发检测和碰撞检测
  19. 微信专属输入法你有了吗?防窃听、护隐私
  20. STM32F103+RTT从零开始(三)—— S50门禁卡复制

热门文章

  1. Web技术(七):如何使用并实现MQTT 消息订阅-发布模型?
  2. ubuntu16.04系统制作本地apt源
  3. 平台全局 css代码,css全局样式基础代码(示例代码)
  4. 什么是智能设备远程监控系统?
  5. java.lang.IllegalStateException : No instances available for XXX
  6. Windows Qt5 集成 OBS 实现录制应用窗口(可指定窗口内录制区域)
  7. isnan函数返回值c语言,C++ std::isnan等函数的使用
  8. C/C++ 病毒破坏手法总结
  9. 小米9008授权账号_如果你用的小米手机,花60秒关闭这4个功能,手机能远离卡顿...
  10. AAPT: error: resource android:attr/lStar not found.