C语言用指针优化销售量表,C语言程序设计案例教程项目六用指针优化学生成绩排名.pptx-资源下载在线文库www.lddoc.cn...

C语言程序设计案例教程项目六 用指针优化学生成绩排名.pptx

项目六 用指针优化学生成绩排名v教学目的通过本项目的学习,要求能掌握指针的基本概念,熟练掌握指针变量的类型说明和指针变量的赋值和运算方法,熟练掌握一维数组指针表示方法,掌握二维数组的指针表示方法,掌握指针在字符串和函数中的使用方法。本项目内容为后续的结构体、文件、课程设计等作好准备,同时,本项目的内容也是为了后续课程 “数据结构 ”奠定基础。项目六 用指针优化学生成绩排名v教学内容 指针域指针变量指针变量的类型说明指针变量的赋值和运算指针域数组 一 维数组的指针表示方法二维数组的指针表示方法指针域字符串数组名和数组指针变量作函数参数字符串指针变量的说明和使用字符串指针变量与字符数组的区别函数指针变量指针型函数指针与函数指针数组多级 数组项目六 用指针优化学生成绩排名重点( )指针的基本概念( 2)数组的指针表示方法难点 、函数指针变量 、指针数组、多级指针v重点和难点( )字符串指针变量的说明和使用( )函数指针变量任务 1 了解指针1)问题情景与实现辅导员张老师在使用小王设计的程序时,发现他要在输入一个班级的学生成绩后,能够自动的得到最高分的那个学生的学号,即有个变量总是能够自动的指向最高分那个学生的学号,在访问数据时可以通过变量直接访问,也可以通过变量的地址间接访问,也就是通过指针来访问,用这种方法更能够提高访问的效率,体现 C语言在编程方便的强大功能。在本任务中我们引入指针概念,来实现对数据的访问、检索和运算,完善了原来的程序,帮助张老师解决了该问题。实现/* 功能成绩的计算 */include void mainint i;int *p;int xuehao;int count;int aMAX;printf“请输入小组的人数 “;scanf“d“,printf“请输入小组的学生成绩 “;fori0;iint strlenthchar *pint len0;while*p0 lenlen1;p; return len;6.1 关于指针的引例void mainchar *pstr“computer“; int len;lenstrlenthpstr;printf“n 字符串的长度是 dn“,len;编译、连接、和运行程序。程序运行后 ,屏幕显示程序 分析 在 主函数中定义一个指向字符串的指针变量 pstr,并将字符串的首地址赋值给 pstr,然后调用求字符串长度的函数strlenthchar *p,得到字符串的长度。在函数strlenthchar *p中,判断 *p是否为 0,如果不为 0,则进行 len的操作,直到遇到 0为止。然后返回 len值。6.1 关于指针的引例在 计算机中,所有的数据都是存放在存储器中的。 一般把存储器中的一个字节称为一个内存单元, 不同的数据类型所占用的内存单元数不等 ,在第 2章中已有详细的介绍。根据内存单元的编号即可准确地找到该内存单元。内存单元的编号也叫做地址。 既然根据内存单元的编号或地址就可以找到所需的内存单元,所以通常也把这个地址称为指针。 .2 指针与指针变量6.2.1 指针与指针变量的基本概念6.2 指针与指针 变量 6.2.1 指针与指针变量的基本概念内存 单元的指针和内存单元的内容是两个不同的概念。 对于一个内存单元来说,单元的地址即为指针, 其中存放的数据才是该单元的内容。在语言中, 允许用一个变量来存放指针,这种变量称为指针变量。因此, 一个指针变量的值就是某个内存单元的地址或称为某内存单元的指针。6.2 指针与指针变量 6.2.1 指针与指针变量的基本概念下图中,设有 字符变量 c,其内容为 “K”ASCII码为十进制数 75, c占用了 011A号单元 地址用十六进数表示 。设有指针变量P,内容为 011A, 这种情况我们称为 P指向变量 c,或说 P是指向变量 c的指针。 严格地说,一个指针是一个地址, 是一个常量。而一个指针变量却可以被赋予不同的指针值,是变量。 但常把指针变量简称为指针。为了避免混淆,我们约定 “指针 ”是指地址, 是常量, “指针变量 ”是指取值为地址的变量。 定义指针的目的是为了通过指针去访问内存单元。001A 75P C .2 指针与指针变量对 指针变量的类型说明包括三个内容1指针类型说明,即定义变量为一个指针变量;2指针变量名;3变量值 指针 所指向的变量的数据类型。指针 变量的一般形式为类型说明符 *变量名;其中 , *表示这是一个指针变量,变量名即为定义的指针变量名,类型说明符表示本指针变量所指向的变量的数据类型。6.2.2 指针变量的类型说明 .2 指针与指针变量 .2.2 指针变量的类型说明例如 int *p1;表示 p1是一个指针变量,它的值是某个整型变量的地址。或者说 p1指向一个整型变量。至于 p1究竟指向哪一个整型变量,由 p1被赋予的地址来决定。再如staic int *p2; /*p2是指向静态整型变量的指 针变量 */float *p3; /*p3是指向浮点变量的指针变量 */char *p4; /*p4是指向字符变量的指针变量 */ 应该 注意的是,一个指针变量只能指向同类型的变量,如 P3只能指向浮点变量,不能时而指向一个浮点变量, 时而又指向一个字符变量。 .2 指针与指针变量指针 变量同普通变量一样,使用之前不仅要定义说明,而且必须赋予具体的值。未经赋值的指针变量不能使用,否则将造成系统混乱,甚至死机。指针变量只能赋予地址, 决不能赋予任何其它数据,否则将引起错误。在语言中,变量的地址是由编译系统分配的,对用户完全透明,用户不知道变量的具体地址。语言中提供了地址运算符 int *p 或者 直接使用 int a10,*p ( 2)赋值语句int a;int *p;p不 允许把一个数赋予指针变量,下面的赋值是错误的 int *p;p1000; 被赋值的指针变量前不能再加 “*”说明符,如写为*p /* 变量 p取得了整型变量 a的地址 */printf “dn”,*p; /* 通过取内容运算符 *,输出变量 a的 值 */编译、连接、和运行程序。程序运行后 ,屏幕显示6.2 指针与指针变量 6.2.4 指针变量的运算【 例 6.3】 使用指针变量的运算/* 源文件名 Li6_3.cpp */include void mainint a10,b20,s,t,*pa,*pb; /* pa,pb为整型指针变量 */pa /* 给指针变量 pa赋值, pa指向变量 a */pb /*给指针变量 pb赋值, pb指向变量 b*/s*pa*pb; /* 求 a、 b之和 *pa就是 a, *pb就是 b */t*pa * *pb; /* 求 a、 b之积 */printf“adtbdt abdt a*bdn“,a,b,ab,a*b;printf“sdt tdn“,s,t;编译、连接、和运行程序。程序运行后 ,屏幕显示6.2 指针与指针变量 6.2.4 指针变量的运算2.指针变量的运算1赋值 运算指针 变量的赋值运算有以下几种形式( 1)指针变量初始化赋值,前面已作介绍。( 2)把一个变量的地址赋予指向相同数据类型的指针变量。例如int a,*pa;pa /*把整型变量 a的地址赋予整型指针变量 pa*/6.2 指针与指针变量 6.2.4 指针变量的运算( 3)把一个指针变量的值赋予指向相同类型变量的另一个指针变量。如int a,*papbpa; /*把 a的地址赋予指针变量 pb*/由于 pa,pb均为指向整型变量的指针变量,因此可以相互赋值 。( 4) 把数组的首地址赋予指向数组的指针变量。6.2 指针与指针变量 6.2.4 指针变量的运算例如int a5,*pa;paa;/*数组名表示数组的首地址,故可赋予指向数组 的指针 变量 pa*/也可写为pa /*数组第一个元素的地址也是整个数组的首 地址 ,也可赋予 pa*/当然 也可采取初始化赋值的方法int a5,*paa;6.2 指针与指针变量 6.2.4 指针变量的运算( 5)把字符串的首地址赋予指向字符类型的指针变量。例如 char *pc;pc“c language“;或用初始化赋值的方法写为 char *pc“C Language“; 这里应说明的是并不是把整个字符串装入指针变量,而是把存放该字符串的字符数组的首地址装入指针变量。在后面还将详细介绍。( 6)把函数的入口地址赋予指向函数的指针变量。例如 int *pf;pff; /*f为函数名 */6.2 指针与指针变量 6.2.4 指针变量的运算2加减算术运算对于 指向数组的指针变量,可以加上或减去一个整数 n。设 pa是指向数组 a的指针变量,则 pan,pa-n,pa,pa,pa,pa 运算都是合法的。指针变量加或减一个整数 n的意义是把指针指向的当前位置 指向某数组元素 向前或向后移动 n个位置。应该注意,数组指针变量向前或向后移动一个位置和地址加 1或减 1 在概念上是不同的。因为数组可以有不同的类型, 各种类型的数组元素所占的字节长度是不同的。如指针变量加 1,即向后移动 1 个位置表示指针变量指向下一个数据元素的首地址。而不是在原地址基础上加 1。6.2 指针与指针变量 6.2.4 指针变量的运算例如int a5,*pa;paa; /*pa指向数组 a,也是指向 a0*/papa2; /*pa指向 a2,即 pa的值为 pa2*/ 指针 变量的加减运算只能对数组指针变量进行, 对指向其它类型变量的指针变量作加减运算是毫无意义的。3两个指针变量之间的运算只有指向同一数组的两个指针变量之间才能进行运算, 否则运算毫无意义。6.2 指针与指针变量 6.2.4 指针变量的运算( 1)两指针变量相减两 指针变量相减所得之差是两个指针所指数组元素之间相差的元素个数。实际上是两个指针值 地址 相减之差再除以该数组元素的长度 字节数 。例如 pf1和 pf2 是指向同一浮点数组的两个指针变量,设 pf1的值为 2010H, pf2的值为 2000H,而浮点数组每个元素占 4个字节,所以 pf1-pf2的结果为 2010H-2000H/44,表示 pf1和 pf2之间相差 4个元素。两个指针变量不能进行加法运算。 例如, pf1pf2是什么意思呢 毫无实际意义。6.2 指针与指针变量 6.2.4 指针变量的运算2两指针变量进行关系运算指向 同一数组的两指针变量进行关系运算可表示它们所指数组元素之间的关系 。例如 pf1pf2表示 pf1和 pf2指向同一数组 元素;pf1pf2表示 pf1处于高地址 位置;pf1pf2表示 pf2处于低地址 位置。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值