欢迎来到得力文库 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
得力文库 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    C语言程序设计 第7章指针.pptx

    • 资源ID:2917558       资源大小:859.25KB        全文页数:55页
    • 资源格式: PPTX        下载积分:25金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要25金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    C语言程序设计 第7章指针.pptx

    第7章指针,C语言程序设计,指针是C语言中一种重要的数据类型,是C语言的精华,灵活地运用指针可以处理各种复杂的数据结构,从而编出精练而高效的应用程序。,7.1指针的概念,1.指针的定义在计算机中,所有的数据都是存放在存储器中。一般把存储器中的一个字节称为一个内存单元,不同的数据类型所占用的内存单元数不等,如整型量占4个单元,字符量占1个单元等,为了正确地访问这些内存单元,必须为每个内存单元编上号。根据一个内存单元的编号即可准确地找到该内存单元,内存单元的编号也叫做地址,通常把这个地址也称为指针。内存单元的指针和内存单元的内容是两个不同的概念。对于一个内存单元来说,单元的地址即为指针,其中存放的数据才是该单元的内容。指针是一种数据类型,它是用来专门存放所指对象地址的变量,即数据值是存放在指针所指的对象中,而不是在指针变量中。,2.指针变量的定义指针变量定义的一般形式如下:类型说明符*变量名;其中,*表示指针变量,变量名即为定义的指针变量名,类型说明符表示指针变量所指对象的数据类型。如“int*p1;”表示p1是指向某一整型变量的指针变量,它的值是某个整型变量的地址,如图7-1-1所示。,7.1指针的概念,例如:float*p2;/*p2是指向实型变量的指针变量*/char*p3;/*p3是指向字符变量的指针变量*/注意:一个指针变量只能指向同类型的变量,如p2只能指向实型变量,不能时而指向一个实型变量,时而又指向一个字符变量。,7.1指针的概念,3.指针变量的引用指针变量同普通变量一样,使用之前不仅要定义说明,而且必须赋予具体的值。未经赋值的指针变量不能使用,否则将造成系统混乱,甚至死机。C语言中提供了运算符“*”和取地址运算符“,7.1指针的概念,设有指向整型变量的指针变量p,如要把整型变量a的地址赋予p,可采用以下两种方式:指针变量初始化的方法inta;int*p=,7.1指针的概念,注意:被赋值的指针变量前不能再加“*”,如写为“*p=,7.1指针的概念,【例7.1.1】运用指针输出变量的值。,7.1指针的概念,程序运行结果:3242【分析】定义整型变量a。定义一个指向a的指针p。从键盘输入一个数送到p指向的地址。将a的值加10。输出指针p所指向的地址中的内容。,7.1指针的概念,4.指针变量作为函数参数函数的参数不仅可以是整型、实型、字符型等数据,还可以是指针类型。它的作用是将一个变量的地址传送到另一个函数中。【例7.1.2】输入a、b、c三个数,按从小到大的顺序输出。,7.1指针的概念,7.1指针的概念,程序运行结果如下:9575,7,9【分析】运用冒泡排序法,两两依次相比较,将小数放在前面,大数放在后面,比较三次得到结果。本程序中定义了指针变量,变量互换时不再借助于第三个变量,而是利用指针指向不同的变量来实现变量的互换。流程图如图7-1-2所示。,7.1指针的概念,7.1指针的概念,一个数组是由连续的一块内存单元组成的。数组名就是这块连续内存单元的首地址。一个数组也是由各个数组元素(下标变量)组成的。每个数组元素按其类型不同占有几个连续的内存单元。一个数组元素的首地址是指它所占有的几个内存单元的首地址。一个指针变量既可以指向一个数组,也可以指向一个数组元素,可把数组名或第一个元素的地址赋予它。1.指针变量处理一维数组引入指针变量后,可以采用“ai”形式和指针法,即采用“*(pa+i)”形式访问数组元素。两种方法的区别如图7-2-1所示。,7.2指针与数组,如要使指针变量指向第i号元素,可以把i元素的首地址赋予它或把数组名加i赋予它。inta10;int*p;p=/*把数组元素a5的地址赋给指针变量p*/,7.2指针与数组,【例7.2.1】运用指针法访问数组元素。,7.2指针与数组,程序运行结果:a0=0a1=1a2=2a3=3a4=4【分析】先用一个循环语句将数组a的5个元素分别赋值为04。再用一个循环语句将数组a的5个元素分别输出。两个循环中访问数组均使用指针法。,7.2指针与数组,7.2指针与数组,程序运行结果:a0=0a1=1a2=2a3=3a4=4【分析】用一个循环实现数组元素的赋值和输出,其中“*pa+”是指先将指针pa所指向的存储单元的内容读出,再将指针pa后移,指向下一个数组元素。,7.2指针与数组,2.用数组名作函数参数可用数组名和数组指针变量作函数参数。数组名就是数组的首地址,实参向形参传送数组名实际上就是传送数组的地址,形参得到该地址后也指向同一数组。指针变量的值也是地址,数组指针变量的值即为数组的首地址,也可作为函数的参数使用。,7.2指针与数组,【例7.2.2】输入10个数,求出其平均值。,7.2指针与数组,7.2指针与数组,程序运行结果:请输入十个数:11223344556677889928这十个数的平均值为:5230【分析】定义一个用于求平均值的函数aver(),主函数中定义保存这10个数的数组sco,并将sco的首地址通过指针sp传给aver定义的指针pa,在函数aver()中通过pa的移动求出数组sco所有元素之和,然后求出均值,最后传给主函数并输出。,7.2指针与数组,3.指针变量处理二维数组定义以下二维数组:inta34=0,1,2,3,4,5,6,7,8,9,10,11;a为二维数组名,此数组有3行4列,共12个元素。可理解为:数组a由三个元素组成a0,a1,a2,而它们每个元素又是一个一维数组,且都含有4个元素(相当于4列)。如a0所代表的一维数组所包含的4个元素为a00,a01,a02,a03,如图7-2-2所示。,7.2指针与数组,从二维数组的角度来看,a代表二维数组的首地址,当然也可看成是二维数组第0行的首地址。a+1代表第1行的首地址,a+2代表第2行的首地址。如果此二维数组的首地址为1000,由于第0行有4个整型元素,所以a+1的地址为1016,a+2的地址为1032。VC+6.0整型数据占4个字节,如图7-2-3所示。,7.2指针与数组,【例7.2.3】输出二维数组元素的地址和数值。,7.2指针与数组,程序运行结果:4354852,4354852,4354852,4354852,0,4354868,4354868,4354868,4354868,4,4354884,4354884,4354884,4354884,8,4354872,43548725,5【分析】二维数组a的首地址是一维数组a0的首地址,即数组元素a00的地址;二维数组a的首地址加1,是一维数组a1的首地址,即数组元素a10的首地址;二维数组a的首地址加2,是一维数组a2的首地址,即数组元素a20的首地址。同理,将一维数组a1的首地址加1,即数组元素a11的地址,其值为5。,7.2指针与数组,1.字符串的表示形式(1)字符串常量存放在一个字符数组中。例如:chars=program;数组s共有8个元素所组成,其中s8中的内容是0。实际上,在字符数组定义的过程中,编译程序直接把字符串复制到数组中,即对数组s初始化。(2)用字符指针指向字符串,然后通过字符指针来访问字符串存储区域。例如:char*cp;cp=program;,7.3指针与字符串,使cp指向字符串常量中的第0号字符p,通过cp来访问这一存储区域,如*cp或cp0就是字符p,而*(cp+i)或cpi就相当于字符串的第i号字符。【例7.3.1】运用字符指针输出字符串。,7.3指针与字符串,程序运行结果:IloveChina!注意:程序中,首先定义字符指针变量string,然后将字符串的首地址赋予string。程序中的:char*string;string=IloveChina!;相当于char*string=IloveChina!;,7.3指针与字符串,2.字符串指针作函数参数【例7.3.2】将一个字符串的内容复制到另一个字符串中(不能使用strcpy()函数)。,7.3指针与字符串,程序运行结果:stringa=CHINAstringb=CHINA【分析】将pss指向的源字符复制到pds所指向的目标字符中,判断所复制的字符是否为0,若是,则表明源字符串结束,不再复制;否则,pds和pss都加1,指向下一字符,继续判断。在主函数中,以指针变量pa,pb为实参,分别取得确定值后调用cpystr()函数。,7.3指针与字符串,3.字符数组和字符指针变量的区别(1)字符数组由若干元素组成,每个元素中放一个字符;而字符指针变量中存放的是地址,即字符串的第一个字符的地址。(2)在赋值方式上,字符数组只能对各个元素赋值,字符指针变量可以如下赋值:char*a;a=IloveChina!;(3)字符数组在定义时可以整体赋初值,但不能在赋值语句中整体赋初值,而字符指针变量可以。,7.3指针与字符串,(4)定义字符数组,不赋初值可以使用;而定义字符指针时,必须赋初值才能使用。(5)指针变量的值是可以改变的。【例7.3.3】更改指针变量的值,输出字符串。,7.3指针与字符串,程序运行结果:China!,(6)字符指针可以带下标使用。指针使用下标时可以理解为数组。如“char*p=abcdef;”,p表示字符串“abcdef”的首地址,*p的值则相当于p0值为a,p1值为b。(7)字符数组中各元素的值是可以改变的(可以再赋值),但字符指针变量指向的字符串常量中的内容是不可以改变的(不可以再赋值)。,7.3指针与字符串,1.用函数指针变量调用函数在C语言中,一个函数总是占用一段连续的内存区,而函数名就是该函数所占内存区的首地址。可以将函数的首地址赋予一个指针变量,使该指针变量指向该函数,然后通过指针变量调用该函数。把这种指向函数的指针变量称为函数指针变量。函数指针变量定义的一般形式如下:类型说明符(*指针变量名)();其中,“类型说明符”表示被指函数的返回值的类型。“(*指针变量名)”表示“*”后面的变量是定义的指针变量。最后的空括号表示指针变量所指的是一个函数。如“int(*pf)();”表示pf是一个指向函数入口的指针变量,该函数的返回值是整型。,7.4指针与函数,【例7.4.1】运用指针形式调用函数,输入两个数,输出较大数。是整型。,7.4指针与函数,程序运行结果:Inputtwonumbers:35max=5【分析】定义一个求较大值的函数max(),主函数通过调用函数max()求出两数中的较大值,然后输出。在主函数中定义一个函数指针“*pmax”,然后将该指针指向函数max()的起始地址,用函数指针变量形式调用函数z=(*pmax)(x,y)。从上例可以看出,调用函数的一般形式如下:(*指针变量名)(实参表),7.4指针与函数,使用函数指针变量时注意:(1)函数指针变量不能进行算术运算,这是与数组指针变量不同的。数组指针变量加减一个整数可使指针移动指向后面或前面的数组元素,而函数指针的移动是毫无意义的。(2)函数调用中“(*指针变量名)”的两边的括号不可少,其中的“*”不应该理解为求值运算,在此处只是一种表示符号。2.返回指针值的函数函数类型是指函数返回值的类型。在C语言中允许一个函数的返回值是一个指针,这种返回指针值的函数称为指针型函数。,7.4指针与函数,定义指针型函数的一般形式如下:类型说明符*函数名(形参表),7.4指针与函数,其中函数名之前加“*”表明这是一个指针型函数,即返回值是一个指针。类型说明符表示返回的指针值所指向的数据类型。例如:,表示ap是一个返回指针值的指针型函数,它返回的指针指向一个整型变量。,【例7.4.2】通过字符指针型函数,输入一个17之间的整数,输出对应的星期名称。,7.4指针与函数,程序运行结果:InputDayNo:3DayNo:3->WednesdayInputDayNo:0DayNo:0->error【分析】定义一个指针型函数day_name(),它的返回值指向一个字符串。该函数中定义了一个静态指针数组name,name数组初始化赋值为8个字符串,分别表示各个星期名及出错提示。形参n表示与星期名所对应的整数。在主函数中,把输入的整数i作为实参,在printf语句中调用day_name()函数并把i值传送给,7.4指针与函数,形参n。day_name()函数中的return语句包含一个条件表达式,n值若大于7或小于1,则把name0指针返回主函数,输出出错提示字符串“error”,否则,返回主函数输出对应的星期名称。函数指针变量和指针型函数在写法和意义上的区别:如“int(*p)()”和“int*p()”是两个完全不同的量。“int(*p)()”是一个变量说明,说明p是一个指向函数入口的指针变量,该函数的返回值是整型量,(*p)的两边的括号不能少;int*p()是函数说明,说明p是一个指针型函数,其返回值是一个指向整型量的指针,“*p”两边没有括号。,7.4指针与函数,本章主要介绍了指针的概念、指针变量定义与引用、取地址运算符&和指针运算符*的基本概念。正确理解指针变量、数组指针、字符串指针和函数指针的应用;掌握指针在编程中的使用方法;能灵活运用指针解决日常生活中的实际问题。,本章小结,1.程序填空:要求通过指针操作,找出3个整数中的最小值并输出。,习题,2.程序填空:要求将字符串从第一个数字字符开始的所有字符复制到另一个字符数组中。,习题,3.程序填空:要求将字符串中的数字字符删除后输出。,习题,4.程序填空:要求将字符串b复制到字符串a。,习题,5.程序填空:比较两个字符串是否相等,若相等,则返回1;否则返回0。,习题,6.编程:将字符串“computer”赋值给一个字符数组,然后从第一个字母开始间隔地输出该字符串。,习题,7.编程:将字符串中的第m个字符开始的全部字符复制成另一个字符串。要求在主函数中输入字符串及m的值并输出复制结果,在被调用函数中完成复制。,习题,8.编程:统计从键盘输入的命令行中第二个参数所包含的英文字符个数。,习题,9.编程:从键盘输入一个字符串,按照在原字符串中每两个字符之间插入一个空格组成一个新字符串。如原字符串是“abcd”,新字符串为“abcd”。要求在函数insert()中完成新字符串。,习题,10.编程:通过指针数组p和一维数组a构成一个32的二维数组,并为a数组赋初值为2、4、6、8、要求先按行的顺序输出二维数组,然后再按列的顺序输出。,习题,谢谢观看THANKYOU,

    注意事项

    本文(C语言程序设计 第7章指针.pptx)为本站会员(小****库)主动上传,得力文库 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知得力文库 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于得利文库 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

    © 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

    黑龙江省互联网违法和不良信息举报
    举报电话:0468-3380021 邮箱:hgswwxb@163.com  

    收起
    展开