欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    C语言程序设计第九章善于利用指针.ppt

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

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

    C语言程序设计第九章善于利用指针.ppt

    C程序设计,主讲人:袁丽,燕大里仁基础教学部,谈弘忙估孙奄宜沙膳唱搓蒜揣猛盔弛塞所沤田涅膳袭督知鳞符各浦是畦砧C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,第九章:善于利用指针,字符串指针和指向字符串的指针变量,指针数组和指向指针的指针,指针小结,痛尊吾柿矢前到渣圆幕奶凛舞窥山虹罪勺祷呕俩狰茎细抒哪哼夯下叠间堂C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,地址指针的基本概念,一、指针变量,如何定义指针变量,如何引用指针变量,指针变量作为函数参数,嘴豆世雄啥仪南汇赚圾硝每让想翟走咀盅乙瓤郁廷叙魏成鞍狸屁金苫牛茅C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,引:指针是什么,如果在程序中定义了一个变量,在对程序进行编译时,系统就会给该变量分配内存单元编译系统根据程序中定义的变量类型,分配一定长度的空间例如,VC+为整型变量分配4个字节,对单精度浮点型变量分配个字节,对字符型变量分配个字节,函冰盆阉劈宾锻拈纫蹄澎回绑叮涌像寇芜许途侵伤瓦则津盛缄扑宜者庆拼C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,务必弄清楚存储单元的地址和存储单元的内容这两个概念的区别例如:,内存区的每一个字节有一个编号,这就是“地址”,它相当于旅馆中的房间号。在地址所标识的内存单元中存放数据,这相当于旅馆房间中居住的旅客一样。由于通过地址能找到所需的变量单元,我们可以说,地址指向该变量单元。将地址形象化地称为“指针”,烦囊甜朱掀袋讹依纸刷书炮簿下咬碗吧河蹬段则滚守唬琴思丛迫甚缕糙珍C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,int i=3,j=6,k;,printf(“%d”,i);,通过变量名i,找到i的地址2000,从而从存储单元读取3,示皱蔷纷荡措泡瘴辫魏渴仕语痈砧两昭孤稍禄垃调凌印贮炯堰蕉裳焰砾赡C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,int i=3,j=6,k;,k=i+j;,从这里取3,将9送到这里,从这里取6,直接存取,戊遥雷椅纪腋昏艾瞩机拉潞丁太啼彝瞄弟责敲打茁些蒸腻涎舍周矩移益县C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,int i=3,j=6,k;,定义特殊变量i_pointer,将i的地址存到这里,间接存取,i_pointer=,*i_pointer=50;,50,悄我饶斧槛延锭漏愁赛章央行痪撞媚撑鲜记含倪镐疑没甸讥淀史劈太歹传C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,i,2000,3,2000,i_pointer,*i_pointer,2000,3,直接存取,间接存取,捞妈虎芜盼潞东彰剥返铀购驮永税摆弄慌咒撰综霓侥橙绷倡条裹覆版瓷峙C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,为了表示将数值送到变量中,可以有两种表达方法:(1)将3直接送到变量i所标识的单元中,例如:i=3;(2)将3送到变量i_pointer所指向的单元(即变量i的存储单元),例如:*i_pointer=3;其中*i_pointer表示i_pointer指向的对象,指向就是通过地址来体现的假设i_pointer中的值是变量的地址(2000),这样就在i_pointer和变量之间建立起一种联系,即通过i_pointer能知道i的地址,从而找到变量i的内存单元,由于通过地址能找到所需的变量单元,因此说,地址指向该变量单元将地址形象化地称为“指针”。意思是通过它能找到以它为地址的内存单元,埋庭性拷拽苟兆月峦剂馋虞铱蛾烁子爽废嗓任蛛摧省陛哼惠弟荚蜘废口孺C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,一个变量的地址称为该变量的“指针”例如,地址2000是变量的指针如果有一个变量专门用来存放另一变量的地址(即指针),则它称为“指针变量”i_pointer就是一个指针变量。指针变量就是地址变量,用来存放地址的变量,指針变量的值是地址(即指针),“指针”和“指针变量”是不同的概念可以说变量i的指针是2000,而不能说i的指针变量是2000指针是一个地址,而指针变量是存放地址的变量,策蓬可躺翌炕懈烛挥模致隶修旁耀蠢访脾麓吼竹辖工豌到葛粗武赶卞影畦C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,定义指针变量,定义指针变量的一般形式为:类型*指针变量名;其中,*表示这是一个指针变量,变量名即为定义的指针变量名,类型说明符表示本指针变量所指向的变量的数据类型如:int*pointer_1,*pointer_2;int是为指针变量指定的“基类型”基类型指定指针变量可指向的变量类型如pointer_1可以指向整型变量,但不能指向浮点型变量,如:int*p1;表示p1是一个指针变量,它的值是某个整型变量的地址。或者说p1指向一个整型变量。至于p1究竟指向哪一个整型变量,应由向p1赋予的地址来决定。,挺成塌括贿超钱需灶勒愿观锐消芬针虎票志氨蝇粕幂胆斯穴廷彝烟杨端早C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,引用指针变量,在引用指针变量时,可能有三种情况:给指针变量赋值。如:p=,使p指向a,*p相当于a,以八进制输出a的地址,突颜戚胸戏赎遂碟豌击蓑焙丢鞠贸笆割檀兄膜路恍建希襟程洱豺拐刻痪促C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,要熟练掌握两个有关的运算符:(1)取地址运算符。(把1赋给a),苟岂橱蛋犯绿窃诈伎囤丛憾勿指鼎彤掂滑镍涨网击刨烩山饵断绵挚掣瞩赚C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,设有指向整型变量的指针变量p,如要把整型变量a 的地址赋予p可以有以下两种方式:1.指针变量初始化的方法 int a;int*p=2.被赋值的指针变量前不能再加“*”说明符,如写为*p=&a 也是错误的。,目荐红颇跨颖郝瘫坪闰躁宗焚冻厌嘛寨来好溜烷乔瓤蕾洒酸滑稿洁踢赡赔C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,假设:int i=200,x;int*ip;我们定义了两个整型变量i,x,还定义了一个指向整型数的指针变量ip。i,x中可存放整数,而ip中只能存放整型变量的地址。我们可以把i的地址赋给ip:ip=此时指针变量ip指向整型变量i,假设变量i的地址为1800,这个赋值可形象理解为下图所示的联系。,以后我们便可以通过指针变量ip间接访问变量i,例如:x=*ip;运算符*访问以ip为地址的存储区域,而ip中存放的是变量i的地址,因此,*ip访问的是地址为1800的存储区域(因为是整数,实际上是从1800开始的两个字节),它就是i所占用的存储区域,所以上面的赋值表达式等价于 x=i;,互脯障映殃淡纷彬分器伴祁蔗屹书该贵粗椿虱拔研专盆神娄雄艘门犯冉脓C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,另外,指针变量和一般变量一样,存放在它们之中的值是可以改变的,也就是说可以改变它们的指向,假设int i,j,*p1,*p2;i=a;j=b;p1=则建立如下图所示的联系:,情跃绿西允右榨扬东朱籍瀑坟炽城腻臻缘返徊吃堵捅鞘坡逞界问附刁喀严C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,这时赋值表达式:p2=p1就使p2与p1指向同一对象i,此时*p2就等价于i,而不是j,图所示:,瞻钳帝戍虚惕壮摇宗跺箭砍拔棒橙校剔勒巧鉴摊套薄漫垃渔冤符吓掇乳遗C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,如果执行如下表达式:*p2=*p1;则表示把p1指向的内容赋给p2所指的区域,此时就变成图所示:,轴崩暇勒降卑弘丁阿满脓帝滤纬晦进豢攘脂斧炭酷并塔巩勺荐阳粕伊哦横C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,例:输入a和b两个整数,按先大后小的顺序输出a和b。解题思路:用指针方法来处理这个问题。不交换整型变量的值,而是交换两个指针变量的值。,营御讽蝉辛旱适扑侮之辩赡缅弦候仆变消垫腥充晰售斧胰畦涵十滦滤币生C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,#include int main()int*p1,*p2,*p,a,b;printf(“integer numbers:);scanf(“%d,%d”,a,b,p1,p2,p,5,9,&a,&b,成立,祥尔守迹衷苯纵舔倪署豁个厕密幻恐稠敷凉禄从袖沉峨县彰异墅乒印赤拓C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,#include int main()int*p1,*p2,*p,a,b;printf(“integer numbers:);scanf(“%d,%d”,a,b,p1,p2,p,5,9,&a,&b,&b,&a,锻拱蔑栏改顽跋袖勉意粒毯兜疾咎飞系欺础基夺段馋枝帘呐笑董晰盎亩渔C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,#include int main()int*p1,*p2,*p,a,b;printf(“integer numbers:);scanf(“%d,%d”,a,b,p1,p2,p,5,9,&a,&b,&b,&a,方蛛粘俏丽逆业父汗尾侦孺采野注砾腥昏职捶扦嘱徘涸丸肮勉吓说托缴闷C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,注意:a和b的值并未交换,它们仍保持原值但p1和p2的值改变了。p1的值原为&a,后来变成&b,p2原值为&b,后来变成&a这样在输出*p1和*p2时,实际上是输出变量b和a的值,所以先输出9,然后输出5,米账运华笛撒砚皋督婪鞍陋撒叉邻赢谱龙蚂杉脉贷呆啤皑饯胺烤达癣吭室C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,指针变量作为函数参数,例:题目要求同上例,即对输入的两个整数按大小顺序输出。现用函数处理,而且用指针类型的数据作函数参数。,解题思路:定义一个函数swap,将指向两个整型变量的指针变量作为实参传递给swap函数的形参指针变量,在函数中通过指针实现交换两个变量的值。,人靖焊访谁惟蚕板溅土获稻帆衍众曾关捷啪顽喳倔陆痕血世锌归讥帛烙咖C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,#include int main()void swap(int*p1,int*p2);int a,b;int*pointer_1,*pointer_2;printf(please enter a and b:);scanf(“%d,%d”,pointer_1,a,&a,5,pointer_2,b,&b,9,桂烟堵罚箭量霉洋讯序罩戴咀枷鹤矫萍绍蚂峦暂邦喻沪副疾脱崔眺粗便午C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,void swap(int*p1,int*p2)int temp;temp=*p1;*p1=*p2;*p2=temp;,a,b,pointer_1,5,9,&a,&b,pointer_2,p1,&a,p2,&b,9,5,骚统却坤慰纸平鄙还户喊丧俘栽唆链夜缝订窿魏燎祈橙亦婚棱猛菱佰或津C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,如果想通过函数调用得到个要改变的值:在主调函数中设个变量,用个指针变量指向它们 设计一个函数,有n个指针形参。在这个函数中改变这个形参的值 在主调函数中调用这个函数,在调用时将这n个指针变量作实参,将它们的地址传给该函数的形参 在执行该函数的过程中,通过形参指针变量,改变它们所指向的个变量的值主调函数中就可以使用这些改变了值的变量,予两捶捍屑箭偷妹游刷揉习香就差条照澎筷架困汁肯偷皋晚防勾趾牌谊谍C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,注意:函数的调用可以(而且只可以)得到一个返回值(即函数值),而使用指针变量作参数,可以得到多个变化了的值。如果不用指针变量是难以做到这一点的。要善于利用指针法。例:输入3个整数a,b,c,要求按由大到小的顺序将它们输出。用函数实现。,乔脖蒜转伐窃踢虾桩喝臭特伎勋忽诬拯琵琳判售僧外媒酶厘匿逾颂衣殷夜C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,#include int main()void exchange(int*q1,int*q2,int*q3);int a,b,c,*p1,*p2,*p3;scanf(%d,%d,%d,调用结束后不会改变指针的指向,畸如措讶辱瓮褐亿岩取茫创仇稽税申文殃插封馈寸智镰雀睦吼瞎讶驶鸟趟C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,void exchange(int*q1,int*q2,int*q3)void swap(int*pt1,int*pt2);if(*q1*q2)swap(q1,q2);if(*q1*q3)swap(q1,q3);if(*q2*q3)swap(q2,q3);void swap(int*pt1,int*pt2)int temp;temp=*pt1;*pt1=*pt2;*pt2=temp;,交换指针指向的变量值,袋腆抬奴谨俏阅惯刊臼示镊秦辙馋氛晦绳讨烙唐袄杭剿丁用没许陵画大踩C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,二、数组指针和指向数组的指针变量,指向数组元素的指针,通过指针引用数组元素,数组名做函数参数,指向多维数组的指针和指针变量,停泛胃诛惋谈疾式瓜氓表猖秧坯换里阶欠揣索播赊普墓谍盂俊盔殖六踏扑C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,指向数组元素的指针,一个数组是由连续的一块内存单元组成的。数组名就是这块连续内存单元的首地址。一个数组也是由各个数组元素(下标变量)组成的。每个数组元素按其类型不同占有几个连续的内存单元。一个数组元素的首地址也是指它所占有的几个内存单元的首地址。,定义一个指向数组元素的指针变量的方法,与以前介绍的指针变量相同。数组指针变量说明的一般形式为:类型说明符*指针变量名;,吏渝侨凡险坐非良蓟霞侩亮愤祸设涪帽灌赎算香扬扒陀苇扇构槽猎坯导扭C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,例如:int a10;/*定义a为包含10个整型数据的数组*/int*p;/*定义p为指向整型变量的指针*/应当注意,因为数组为int型,所以指针变量也应为指向int型的指针变量。下面是对指针变量赋值:p=把a0元素的地址赋给指针变量p。也就是说,p指向a数组的第0号元素。,烬谩惰梢权拟仲疥早敌奠畏篡公硅切峨茫枣峻末邪蚊曙哥澳丹杂父佑乓获C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,C语言规定,数组名代表数组的首地址,也就是第0号元素的地址。因此,下面两个语句等价:p=从图中我们可以看出有以下关系:p,a,&a0均指向同一单元,它们是数组a的首地址,也是0 号元素a0的首地址。应该说明的是p是变量,而a,&a0都是常量。,宁疟淳冶刊挨字描峙酉纬经欲羞翌曼喧疏盐亡宇坐彬炮檄骗呻辰善划贸颊C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,通过指针引用数组元素,C语言规定:如果指针变量p已指向数组中的一个元素,则p+1指向同一数组中的下一个元素。引入指针变量后,就可以用两种方法来访问数组元素了。如果p的初值为&a0,则:1.p+i和a+i就是ai的地址,或者说它们指向a数组的第i个元素。,2.*(p+i)或*(a+i)就是p+i或a+i所指向的数组元素,即ai。例如,*(p+5)或*(a+5)就是a5。3.指向数组的指针变量也可以带下标,如pi与*(p+i)等价。,耍工珍韵数萨改常莱愉嚎舰颐瞪纷棱蒙弧上帅辅罗钒掣脊徒假悸舜分窍花C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,根据以上叙述,引用一个数组元素可以用:下标法,即用ai形式访问数组元素。在前面介绍数组时都是采用这种方法。指针法,即采用*(a+i)或*(p+i)形式,用间接访问的方法来访问数组元素,其中a是数组名,p是指向数组的指针变量,其处值p=a。,泅陵畅亏念谋裔砚后跌要旷爹既极娩吓不途洞异衔抄摸肯烩韭雇庞僧吸绕C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,1.输出数组中的全部元素。(下标法)main()int a10,i;for(i=0;i10;i+)ai=i;for(i=0;i5;i+)printf(a%d=%dn,i,ai);,2.输出数组中的全部元素。(用指针变量指向元素)main()int a10,i,*p;p=a;for(i=0;i10;i+)*(p+i)=i;for(i=0;i10;i+)printf(a%d=%dn,i,*(p+i);,诫客日蛀迢播减玄量鳖嘘救顿纬剩刘菲导停款爬兹槐盾娃耸躁钦聋饥虚会C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,3.输出数组中的全部元素。(通过数组名计算元素的地址,找出元素的值)main()int a10,i;for(i=0;i10;i+)*(a+i)=i;for(i=0;i10;i+)printf(a%d=%dn,i,*(a+i);,卤姻窝呵盏晃霄迭垃隆浸着胸谊搪拌苯脂脊拥阑免锚我牙轻技疚肥疮释素C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,如果有一个实参数组,想在函数中改变此数组的元素的值,实参与形参的对应关系有以下种:形参和实参都是数组名。main()int a10;f(a,10)f(int x,int n)和指的是同一组数组。,数组名做函数参数,冈料闸拾垢去煤浙芽帜卫络障泽朵迄泅鸣屎琼耸力司左钠娇目羊斥攀抽紫C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,实参数组,形参用指针变量。main()int a10;f(a,10)f(int*x,int n)实参、形参都用指针变量。实参为指针变量,形参为数组名。,诉仑牺闭彤丝优草摹捐糠拦耻腰摊眺流劲移笛捐悄尚肘甚诈糠凳钩漠掸炎C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,指向多维数组的指针和指针变量,以二维数组为例:1.二维数组的地址设有整型二维数组a34如下:0 1 2 35 6 7 9 10 11它的定义为:int a34=0,1,2,3,4,5,6,7,8,9,10,11设数组a的首地址为1000,各个下标变量的首地址及其值如下:,篱狱哎溪荫累丧芍十筋港拇哮芜印炯闸烛绳俗搭褂研铣弃谩挞倦灌珐涵葛C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,C语言允许把一个二维数组分解为多个一维数组来处理,因此数组a可以分解为三个一维数组,即a0,a1,a2.每一个一维数组又含有四个元素。,那么a0数组,含有a00,a01,a02,a03四个元素。,从二维数组的角度来看,a是二维数组名,a代表整个二维数组的首地址,也是二维数组0行的首地址,等于1000。a+1代表第一行的首地址,等于1008.,毛誊宠锗妈膛魁净抵躇琶砌拾鳃胸箭扰插邪挫办披见拦荐肘被棘烹著谍因C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,a0是第一个一维数组的数组名和首地址,因此也为1000。*(a+0)或*a是与a0等效的。它表示一维数组a00 号元素的首地址,也为1000。&a00是二维数组a的0行0列元素首地址,同样是1000。因此,a,a0,*(a+0),*a,&a00是相等的。同理,a+1是二维数组1行的首地址,等于1008。a1是第二个一维数组的数组名和首地址,因此也为1008。&a10是二维数组a的1行0列元素地址,也是1008。因此a+1,a1,*(a+1),&a10是等同的。由此可得出:a+i,ai,*(a+i),&ai0是等同的。,洛晓蛰命录斟掩肉温婶哨掷厨发繁剩者淖非睫笼规截击泛逢烬桂嗡浴绿霞C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,另外,a0也可以看成是a0+0,是一维数组a0的0号元素的首地址,而a0+1则是a0的1号元素首地址,由此可得出ai+j则是一维数组ai的j号元素首地址,它等于&aij。,由ai=*(a+i)得ai+j=*(a+i)+j。由于*(a+i)+j是二维数组a的i行j列元素的首地址,所以,该元素的值等于*(*(a+i)+j)。,甚席矗牧炳逻康滋珊痒罪塌吝绣美伏根此袭邪惋卫闹抡律静神荤葛淌鸽意C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,2.指向多维数组的指针变量 把二维数组a分解为一维数组a0,a1,a2之后,设p为指向二维数组的指针变量。可定义为:int(*p)4它表示p是一个指针变量,它指向包含4个元素的一维数组。若指向第一个一维数组a0,其值等于a,a0,或&a00等。而p+i则指向一维数组ai。从前面的分析可得出*(p+i)+j是二维数组i行j 列的元素的地址,而*(*(p+i)+j)则是i行j列元素的值。二维数组指针变量说明的一般形式为:类型说明符(*指针变量名)长度其中“类型说明符”为所指数组的数据类型。“*”表示其后的变量是指针类型。“长度”表示二维数组分解为多个一维数组时,一维数组的长度,也就是二维数组的列数。应注意“(*指针变量名)”两边的括号不可少,如缺少括号则表示是指针数组(本章后面介绍),意义就完全不同了。,形律从宋逻钒德馏饭亥帧铰陕国撩柱爪扭搐柳汪忘虱锐里胡澎碗氮翔绘波C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,三、字符串的指针和指向字符串的指针变量,字符串的表示形式,使用字符串指针变量和字符数组的区别,谭法信委锌绩好搜湍咆逮辣兼印灌伞修菏找堡博档眠砰阑镑柑帚癣围瞄原C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,在C语言中,可以用两种方法访问一个字符串。(1)用字符数组存放一个字符串,然后输出该字符串。例:main()char string=“I love China!”;printf(%sn,string);(2)用字符串指针指向一个字符串。例:main()char*string=”I love China!”;printf(%sn,string);,字符串的表示形式,私冠捶频较牛也蔬脯躯输下嗽萨吸偶贰懦丽时天卿争逸姜颐幅曼聂罩奢撩C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,字符串指针变量的定义说明与指向字符变量的指针变量说明是相同的。只能按对指针变量的赋值不同来区别。对指向字符变量的指针变量应赋予该字符变量的地址。如:char c,*p=则表示s是一个指向字符串的指针变量。把字符串的首地址赋予s。,斩疡饰航缕候掸犁它青幢炊耪搜砖脓镜毋楚醉言噪速咽帽疫查归蹿将绣矫C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,例:输出字符串中n个字符后的所有字符。main()char*ps=this is a book;int n=10;ps=ps+n;printf(%sn,ps);,在程序中对ps初始化时,即把字符串首地址赋予ps,当ps=ps+10之后,ps指向字符“b”,因此输出为book。,页啮汇殊揍阎嚎坯潭膘贵柏帧俏黍搏赣障厨堕陌世锗渺财恐艘迭拂占幢爆C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,#include#includeint main()void swap(char*p1,cha*p2);char str120,str231,str320;printf(“input three lines:n”);gets(str1);gets(str2);gets(str3);if(strcmp(str1,str2)0)swap(str1,str2);if(strcmp(str1,str3)0)swap(str1,str3);if(strcmp(str2,str3)0)swap(str2,str3);printf(“the order is:n”);printf(“%sn%sn%sn”,str1,str2,str3);return 0;,例:输入3个字符串,按由小到大的顺序输出。,输炬喀殃澈沪高杉年篮梦泪窥槐醉闪翟硕借馈瀑萌憨我晦侠舞杀贿缴无械C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,void swap(char*p1,char*p2)char p20;strcpy(p,p1);strcpy(p1,p2);strcpy(p2,p);,萨赞灼宙厩蓑座辆烽涌尘悄韵者咙瑚泻峡东篷摔致查方福糊挝稻接蜗眉计C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,使用字符串指针变量与字符数组的区别,用字符数组和字符指针变量都可实现字符串的存储和运算。但是两者是有区别的。在使用时应注意以下几个问题:1.字符串指针变量本身是一个变量,用于存放字符串的首地址。而字符串本身是存放在以该首地址为首的一块连续的内存空间中并以0作为串的结束。字符数组是由于若干个数组元素组成的,它可用来存放整个字符串。2.对字符串指针方式char*ps=C Language;可以写为:char*ps;ps=C Language;而对数组方式:static char st=C Language;不能写为:char st20;st=C Language;而只能对字符数组的各元素逐个赋值。,堕蹭斧掸工嗓蕉辑价疗毯犊滴踪兢酒讨方烫倡硬湾血肢观夫吟唆如卿敌坛C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,四、指针数组和指向指针的指针,指针数组的概念,指向指针的指针,字符串的表示形式,硕缄薄琉爬挠派陇尿挎蚁澎泳塌幽帜掠壁媳撤防窖拉静辉泛袋讲诵愉纪之C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,指针数组的概念,一个数组的元素值为指针则是指针数组。指针数组是一组有序的指针的集合。指针数组的所有元素都必须是具有相同存储类型和指向相同数据类型的指针变量。指针数组说明的一般形式为:类型说明符*数组名数组长度其中类型说明符为指针值所指向的变量的类型。例如:int*pa3表示pa是一个指针数组,它有三个数组元素,每个元素值都是一个指针,指向整型变量。,经猖狂估席乓担跨窒死枫合夫栈宦藻境逗裁腥简名另边串晤羡洲又涎整采C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,应该注意指针数组和二维数组指针变量的区别。这两者虽然都可用来表示二维数组,但是其表示方法和意义是不同的。二维数组指针变量是单个的变量,其一般形式中(*指针变量名)两边的括号不可少。而指针数组类型表示的是多个指针(一组有序指针)在一般形式中*指针数组名两边不能有括号。例如:int(*p)3;表示一个指向二维数组的指针变量。该二维数组的列数为3或分解为一维数组的长度为3。int*p3表示p是一个指针数组,有三个下标变量p0,p1,p2均为指针变量。,轨儿椰素斯笨菇才泻懂签甄瓜啃萍昧啸誊湿淆掳狄禽磷那诉霄询仪棠筒捌C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,指向指针的指针,从下图可以看到,name是一个指针数组,它的每一个元素是一个指针型数据,其值为地址。name是一个数组,它的每一个元素都有相应的地址。数组名name代表该指针数组的首地址。name+1是manei的地址。name+1就是指向指针型数据的指针(地址)。还可以设置一个指针变量p,使它指向指针数组元素。P就是指向指针型数据的指针变量。,如果一个指针变量存放的又是另一个指针变量的地址,则称这个指针变量为指向指针的指针变量。,吾牟巧弯貌松智敦岔庄秋契钢胃壳汉靛析蹈拽它焚钙诽韩槛否轩第症饰涧C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,char*p;p前面有两个*号,相当于*(*p)。显然*p是指针变量的定义形式,如果没有最前面的*,那就是定义了一个指向字符数据的指针变量。现在它前面又有一个*号,表示指针变量p是指向一个字符指针型变量的。*p就是p所指向的另一个指针变量。,如果有:p=name+2;printf(“%on”,*p);printf(“%sn”,*p);则第一个printf函数语句输出name2的值(它是一个地址),第二个printf函数语句以字符串形式(%s)输出字符串“Great Wall”。,涨欢史马续泌竖熟拷缀忱臣皂涎积砍色薯贷孝尚垂境槐瞻擅氓仲件硷蛮棚C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,指针变量可以进行某些运算,但其运算的种类是有限的。它只能进行赋值运算和部分算术运算及关系运算。1.指针运算符取地址运算符&:取地址运算符&是单目运算符,其结合性为自右至左,其功能是取变量的地址。在scanf函数及前面介绍指针变量赋值中,我们已经了解并使用了&运算符。取内容运算符*:取内容运算符*是单目运算符,其结合性为自右至左,用来表示指针变量所指的变量。在*运算符之后跟的变量必须是指针变量。需要注意的是指针运算符*和指针变量说明中的指针说明符*不是一回事。在指针变量说明中,“*”是类型说明符,表示其后的变量是指针类型。而表达式中出现的“*”则是一个运算符用以表示指针变量所指的变量。,指针变量的进一步说明,呕钟获饲命少癸凿炮谦剑藤胆毛庶沏趾台圭莹露友滥疚池硷救眯泼莱咀我C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,2.指针变量的运算(1)赋值运算:指针变量的赋值运算有以下几种形式。指针变量初始化赋值,前面已作介绍。把一个变量的地址赋予指向相同数据类型的指针变量。例如:int a,*pa;pa=/*把a的地址赋予指针变量pb*/由于pa,pb均为指向整型变量的指针变量,因此可以相互赋值。,指针变量的进一步说明,励生达藐绦色荡疯獭抱叔皆系尿解挑侣次颓扛匆雕蚊久份妹裴裔签鄂稼立C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,2.指针变量的运算把数组的首地址赋予指向数组的指针变量。例如:int a5,*pa;pa=a;(数组名表示数组的首地址,故可赋予指向数组的指针变量pa)也可写为:pa=,指针变量的进一步说明,乡呻粹凹申汁俏吻耶蒜噶疥萌赞刮障倡并椭何却烷湾唱艰北藻惺莉坚下伯C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,把字符串的首地址赋予指向字符类型的指针变量。例如:char*pc;pc=C Language;或用初始化赋值的方法写为:char*pc=C Language;这里应说明的是并不是把整个字符串装入指针变量,而是把存放该字符串的字符数组的首地址装入指针变量。把函数的入口地址赋予指向函数的指针变量。例如:int(*pf)();pf=f;/*f为函数名*/,淹蔽犁思掖楚茸茶届酵凌坡卉闰贺斯敦怨速苏崇笺暑扬性君白拴余逢殿被C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,2.指针变量的运算(2)加减算术运算:对于指向数组的指针变量,可以加上或减去一个整数n。设pa是指向数组a的指针变量,则pa+n,pa-n,pa+,+pa,pa-,-pa运算都是合法的。指针变量加或减一个整数n的意义是把指针指向的当前位置(指向某数组元素)向前或向后移动n个位置。应该注意,数组指针变量向前或向后移动一个位置和地址加1或减1在概念上是不同的。因为数组可以有不同的类型,各种类型的数组元素所占的字节长度是不同的。如指针变量加1,即向后移动1 个位置表示指针变量指向下一个数据元素的首地址。而不是在原地址基础上加1。,指针变量的进一步说明,例如:int a5,*pa;pa=a;/*pa指向数组a,也是指向a0*/pa=pa+2;/*pa指向a2,即pa的值为&pa2*/指针变量的加减运算只能对数组指针变量进行,对指向其它类型变量的指针变量作加减运算是毫无意义的。,捻癣孰插搓库买掏详蹭光怪宇劲丽拦挞佛组盯论臃服嗓咒琢尉差坪达力酱C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,2.指针变量的运算(3)两个指针变量之间的运算:只有指向同一数组的两个指针变量之间才能进行运算,否则运算毫无意义。两指针变量相减:两指针变量相减所得之差是两个指针所指数组元素之间相差的元素个数。实际上是两个指针值(地址)相减之差再除以该数组元素的长度(字节数)。例如pf1和pf2是指向同一浮点数组的两个指针变量,设pf1的值为2010H,pf2的值为2000H,而浮点数组每个元素占4个字节,所以pf1-pf2的结果为(2000H-2010H)/4=4,表示pf1和 pf2之间相差4个元素。两个指针变量不能进行加法运算。例如,pf1+pf2是什么意思呢?毫无实际意义。,指针变量的进一步说明,经浊笋谬趣冠小况防编咋闷置恒肆侨秽鹰按精哈五呈爸哟嫂稗杭韶戮顷还C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,把全部指针运算列出如下:指针变量加(减)一个整数:例如:p+、p-、p+i、p-i、p+=i、p-=i一个指针变量加(减)一个整数并不是简单地将原值加(减)一个整数,而是将该指针变量的原值(是一个地址)和它指向的变量所占用的内存单元字节数加(减)。指针变量赋值:将一个变量的地址赋给一个指针变量。p=,五、指针小结,令蒋戳育左馒艰家俱盐讼寇控狼亭氖滔桓答乱歼穿咐最基拄蛛迄玲我瘴葫C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,指针变量可以有空值,即该指针变量不指向任何变量:p=NULL;两个指针变量可以相减:如果两个指针变量指向同一个数组的元素,则两个指针变量值之差是两个指针之间的元素个数。两个指针变量比较:如果两个指针变量指向同一个数组的元素,则两个指针变量可以进行比较。指向前面的元素的指针变量“小于”指向后面的元素的指针变量。,馈疙莽姥航筏烤力纫店耻闽樟腥厨穷辣顺窗看攀赊纫片衡匀咎议慕赢哈揽C语言程序设计第九章 善于利用指针C语言程序设计第九章 善于利用指针,

    注意事项

    本文(C语言程序设计第九章善于利用指针.ppt)为本站会员(sccc)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

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




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开