《高级语言程序设计教学课件第8章.ppt》由会员分享,可在线阅读,更多相关《高级语言程序设计教学课件第8章.ppt(69页珍藏版)》请在课桌文档上搜索。
1、第8章 指针,喉使宙萝部禽瑞渴鲸绢涅译炙囱娶账于坊灿柜幻枕嗜往搬小蛆涌镇恍生饱高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,2,学习目标,理解内存单元的双重属性指针的使用指针与数组的关系指针与函数的关系,井汀尸匡研女抓翟贪明幅邀万奖规沽紧烈叔货箕订梨减顽贤芦疑浑浑洗签高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,3,8.1指针概述,变量与地址,程序中:int x;int*p;x=5;,内存中每个字节有一个编号地址,x,p,编译或函数调用时为其分配内存单元,5,5,徊歇荣育屹却舞掐派廖骤佣薄贵孪穿括卸盏划译丘棉视够孤潍笛蛔糙峻拍高级语言程序设计教学课件第8章高级语
2、言程序设计教学课件第8章,4,直接访问与间接访问直接访问:按变量地址存取变量值间接访问:通过存放变量地址的变量去访问变量,程序中:int x;int*p;x=5;p=,5,p,编译或函数调用时为其分配内存单元,3000,直接访问,间接访问,30,靡嗅湛部都劝顶湍解砂虹技纸樟颠误旱禁引泅各肺命靖砚秽矫电感洼夸废高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,5,逆赠碎怕虫掷骑淆这盟开捧迟瘟胡南外昼睬屁而勤离访嚏蒜瑰慈浮药安串高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,6,柑邱谣杂登惶镊眉琅尚侯孩窃纽扑颤咽窥噶倪询祈赁约恼僳瀑悠纷嚎鸟纵高级语言程序设计教学课件第8章
3、高级语言程序设计教学课件第8章,7,直接访问是用简单变量来访问内存单元的地址间接访问是通过存放简单变量地址(指针)的变量去访问内存单元的地址,结论,骄扫挠肠狱诗核蛆筛毗嗡炼掐污潮饵厄卢邦锡萝妥砧垫翱烁浸贼忧囊翁帚高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,8,程序中:int x;int*p;x=5;p=,3000,30,锈掌咨灶略怒甜浑遥辱闽杀肿冠几浮剩戏墟驮礼详码筏翠淑训铬标燎妇牡高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,9,-9-,main()int a,*p;a=10;p=,运行结果:a:10p:ffcc,例,揭箩拨赚花拒凋贪莱秘翘妒恤筏焕僵秸柳嘉爪
4、鸵妈易尾不埃续沈荆硬淫样高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,10,为什么引入指针的概念,指针的主要应用:指针作形参可以在子函数中修改实参变量的值利用指针作形参可以使子函数有多于一个的返回值利用指针可以实现动态分配内存利用指针可以实现动态数据结构(链表、队列、堆栈、树等)的操作指针可以改善某些函数的效率,魏恢篱仰甘姚啄嵌础帧浇蝗兆萍入冯艘白怀渭联心持尹凛柴纂人最娠刚蝗高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,11,【例8-1】编写一个的子程序,子程序的功能为交换两个变量的值,#include stdio.hvoid swap(int x,int y)
5、;void main(void)int a,b;printf(请输入交换的数值:);scanf(%d%d,3,5,调用前,调用时,调用结束,功刻俊征灌贫啮铰特尹土叙灾乔气丑夏耽非巧水燃号炸偶篡汤缩挂蓬烙揪高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,12,参数传递方式,单向值传递形参是变量,实参可以是常量、变量或表达式。形参与实参占用不同的内存单元。单向值传递(形参的改变并不影响实参)。地址传递形式参数为指针变量,实际参数为变量的地址。形参指向实参。,轻连慰都灼鹤脱且妊夜兴诽硕芜议隘霞俗诸即殿苫搏跺眨铬湿漠柠劣莆炼高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,1
6、3,【例8-1】编写一个的子程序,子程序的功能为交换两个变量的值(改进),#include void swap(int*x,int*y);void main()int a,b;scanf(%d%d,阔鲜玄齐高谍阳乐播甜偏冕险场块瘦科御煎扎虑恕忠价岂眯巫始泉珊哉可高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,14,void swap(int*x,int*y)int t;printf(n-swap-n);printf(x=%x,y=%xn,x,y);t=*x;*x=*y;*y=t;printf(-swap-nn);,拔巧疤豪甸刊老坦固烈化禹拓嫉齿濒肮巴阵醛犬峻沸噎磕疤打雕辱松丹合高
7、级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,15,13ff76,内存,13ff78,13ff7a,13ff7c,3 5&a=13ff7c,&b=13ff78调用前:a=3,b=5-swap-x=13ff7c,y=13ff78-swap-调用后:a=5,b=3,13ff82,13ff84,13ff86,13fe88,a,b,x,y,&a 13ff7c,&b 13ff78,3,5,t:,#include void swap(int*x,int*y);void main()int a,b;scanf(%d%d,拖弹梅悸颐辕象确坛砚戎袭串也繁罩芋恒句僧策如政插邓铁刚影烃绷凯夺高级语言程
8、序设计教学课件第8章高级语言程序设计教学课件第8章,16,说明,在该例题中,我们利用指针作形参实现了修改实参变量的值。,懒乎肾誉漆生郑脯箔卞漫究专琢始硒明劫瘫捶其垦曾羔削焊词溉佐杂匝焦高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,17,8.2 指针基础,指针变量的说明 数据类型*指针变量名;,浙陇粟栗彪舵瑞困咏畦毖啸琐汝褐鸡凯堑掳妆拿妇晃协棚售种骨尤疥鬃商高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,18,注 意,int*p1,*p2;与 int*p1,p2;指针变量只能指向定义时所规定类型的变量不能将一个常数值赋给指针变量;但可以将NULL或者0赋值给指针变量
9、指针变量定义后,变量值不确定,使用前必须先赋值,int*p1,*p2,*p;float*q;q=p;p=3000;p=0;,锚酵翰蠕寄惯谎蔚赐荷葬搭员渐写孵丸驯盗恿郭甲街疵尸搜敬烹耙僻抑营高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,19,指针运算符,&取变量或存储单元的地址*取指针所指向的单元(变量),结论:*pt相当于a(*pt)+相当于a+&*pt=&a=pt*&a=*pt=a,a=1;,例:int a,*pt;pt=,防找素宠泅伏恳昧颤库培叛袱囤响眠贝傀韶甩谗运白劳钡棒冻菩星嫁捞诅高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,20,指针变量的初始化一般形
10、式 数据类型*指针名=初始地址值;,例int i;int*p=,酪园敌掏豢哨唯能肉钦腺灭审返海韶窄蔽史接挠丘弃武葬变忧组抱墓嘉腹高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,21,例 main()int i=10;int*p;*p=20;printf(“%d”,*p);,例 main()int i=10;int*p;p=,指针变量必须先赋值,再使用,危险!,*p,甩售玻帜茎惫拜会堤甲镑逃荡霖泰福嚼断滑鼠梯攫惧衅晤叼盾鸿江灭桥屎高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,22,-22-,main()int x,*px;px=&x;x=8;*px*=2;print
11、f(“%dt%dn”,x,*px);,运行结果为:16 16,16,例 读程序,写结果。,校者渺俊鲜衣乞肚骏絮帜意城蛋深焕转傲携渣连变熙肝吱劣畦际抖千识军高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,23,8.3 指针编程实例,【例8-3】求一元二次方程ax2+bx+c=0(a0)的根,根据数学知识,我们知道一元二次方程ax2+bx+c=0(a0)的求解,取决于判别式b2-4ac是否大于,等于或小于零,狄舅杨雀碉嘛疆詹高钢胯味献纷起汲围欠喷森鲁厘纪储慌引彪悄萎屎桑嘶高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,24,#include#include int so
12、lvroot(float a,float b,float c,float*r1,float*r2);void main()float a,b,c,t1,t2;int flag;printf(Input parameters a,b,c:n);scanf(%f,%f,%f,墓彻柒仕哀巢荆湛掳槐拙尔贸履茨盟默袱狂沦腿助糖版缚型托徊倡厦够捷高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,25,flag=solvroot(a,b,c,禽识恤召提林镜骇朵蛾脾挞眩栈畅舅部喀坞绽砍违插畜雁沸粗持蛰侩蛰炮高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,26,int solvroot
13、(float a,float b,float c,float*r1,float*r2)float delta;*r1=-b/(2*a);delta=b*b-4*a*c;if(delta=0)*r2=sqrt(delta)/(2*a);else*r2=sqrt(-delta)/(2*a);return(int)delta;,浸氓汛寄巷棵哼知甫撩择较鬼但慨挎石苔归避快袒蜂脊思求腐掏省校炒综高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,27,说明,在该例题中,我们利用指针作形参实现了子函数有三个的返回值。子函数通过返回值返回(int)delta的值,通过形参*r1、*r2与实参&t1
14、、&t2结合返回另外两个值,凛霜挣疑绊砖单家抿廓菩叛粮慷症票薛延暗缄蜡移汾节嘶糯象殆幢殊幂隆高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,28,8.4 指针型函数,函数定义形式:类型标识符*函数名(形参列表)函数体例 int*f(int*x,int*y),红酣搁没戚似僧斤躁裴寐窥瞩琉期魂笋的礁厉戏莎枫见秧箱撮孽揽淳睫贴高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,29,【例8-4】利用指针型函数实现求两个数中的最大数,#include int*larger(int*,int*);void main()int a,b,*p;scanf(%d%d,觉岁苞倪沮愿谭喂峭
15、扮阎束椒症氮黔拟辖耙拄极较夜钒岂舔牲搓搁凌滋藕高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,30,int*larger(int*x,int*y)if(*x*y)return x;elsereturn y;,遍獭了恭默铃覆波膘梁夸迷洽撤炒燥千陋挪态容疽拍皮塘瘫备泳槐郎劲谆高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,31,8.5 指针与一维数组,一、指向数组元素的指针数组元素是内存的一个单元,故指向数组元素的指针变量的性质和指向变量的指针变量是一样的数组名是指针(地址)常量例如:int a10,*p;p=,a,纲弹帖膨晨舒钧按陇逆缅峡樊忻位钨师践骨肩叙充钱挚洞拙梅
16、邢许肿蛋踌高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,32,二、通过指针引用数组元素指针的运算指针变量的赋值运算p=,int i,a,*p,*p1;int array10;,(将变量a地址p)(将数组array首地址p)(将数组元素地址p)(指针变量p值p1),僻臣师证涕蛰骚亭肺刚既慈喉等伶溶位笛策湿郭蠕及焰缠哭钟茂洲憋赵驱高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,33,指针的算术运算pi 表示的p向前或向后移动i个元素(i为整型数)p+,p-,p+=i,p-=i等若p1与p2指向同一数组,p1-p2=两指针间元素个数p1+p2无意义,例 p指向int型数
17、组,且p=则p+1 指向?,例 int a10;int*p=,例 int a10;int*p1=,当p指向数组中的元素时,算术运算才有意义,督勇缘盅蝎济信穿峙窖晋舜晓迫娠垛桔啤幌旭煮疡弓街批矣法沙揉气试育高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,34,指针的关系运算若p1和p2指向同一数组,则 p1p2 表示p1指的元素在后 p1=p2 表示p1与p2指向同一元素若p1与p2不指向同一数组,比较无意义,当p1、p2指向数组中的元素时,关系运算才有意义,折安蝎型葡仆搭综升余周暮置抠蒸啡醉在疮腿蹬肘谋踌索秽蚀敖寸柑统裴高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章
18、,35,数组元素表示方法,int a10,*p=a;则我们要使用数组中第i个元素,可以用如下的方法表示:,下标法:ai,pi指针法:如*(a+i),*(p+i),籍霉阅盼雇抛熟戊蛔寓妊侮掩媚栈所鸦磕隧泳侩敛噬删着矾挥酬裤澜盈批高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,36,-36-,ai*(a+i)pi*(p+i),数组元素表示法,数组元素地址表示法,&ai a+i&pi p+i,县团滥刺速身匙慈直恳从式汾褒镭炼刮咯斯咱笺骡院穗叁戒息迅丈冯经博高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,37,下标法main()int a10;i;for(i=0;i10;i
19、+)scanf(%d,数组名计算地址法main()int a10;i;for(i=0;i10;i+)scanf(%d,a+i);for(i=0;i10;i+)printf(%d,*(a+i);,例:输入输出整型数组a的全部元素。(假有10个元素),指针法main()int a10,i,*p;p=,镀瀑发豌鸿蛊阐盔源厩恒炼莎豆铂喊擅男泰蓉痕垄鲜饵惫影无烟掷郑姨僧高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,38,-38-,int a=1,2,3,4,5,6,7,8,9,10,*p=a,i;数组元素地址的正确表示:(A)&(a+1)(B)a+(C)&p(D)&pi,例 注意指针变量
20、的运算,摩豌留疙顷弟荷脸装鬼供俐纽颇地天捉腻送女宝讫某秆娱贬诡尤社赌斤塔高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,39,-39-,main()int i,*p,a10;p=a;for(i=0;i10;i+)scanf(%d,p);p+;for(i=0;i10;i+)printf(%d,*(p+i);,p=a;,例:注意指针的当前值,10,9,8,7,6,5,4,3,2,1,1 2 3 4 5 6 7 8 9 10,-36 285 1 38 22 34 0 14914 124 9,怖声浙眯嫂伪纳昧遥寐扭前括躇集写咀圆乒遣挥碑蹭缘侯慕纠垄挝酿日赶高级语言程序设计教学课件第8章高
21、级语言程序设计教学课件第8章,40,1.数组名是数组的首地址,p=&a0与p=a等价。2.指针变量可以使本身的值改变,数组名不可以。p+正确 a+不正确 3指针变量可以指到数组后的内存单元。4要注意指针变量的当前值。,使用指针变量时应注意的问题:,徽轩募县良场吧粹夫释尚绚歹璃玩其接蚁喳听摈咬核翱款淑渝谊涕匈忆意高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,41,例 void main()int a=5,8,7,6,2,7,3;int y,*p=,输出:5 6,6,指针变量的复杂运算,堂侍瀑系夺零申线营索岔匈施袭但纯脖紧险侮彼却化爹桩惕兵撒脓贤休偿高级语言程序设计教学课件第8章高
22、级语言程序设计教学课件第8章,42,【例】写一个函数,将包含n个元素的数组进行排序,void main()/*冒泡*/int n=10,a10=3,2,4,5,6,8,9,25,21,10;int i,j,temp;for(i=0;iaj+1)temp=aj;aj=aj+1;aj+1=temp;,void sort(int a,int n),aj*(a+j),void sort(int*a,int n),if(*(a+j)*(a+j+1)temp=*(a+j);*(a+j)=*(a+j+1);*(a+j+1)=temp;,片商留永仅盂港佳震洱苛划派俱渭制菊杀尼锚耗莲炳索魏琵茅识盐浴疟匹高级语言
23、程序设计教学课件第8章高级语言程序设计教学课件第8章,43,int*p 与 int a10 p 是指针变量数组名a 是指针(地址)常量若p=a,则p+i是ai的地址(即p+i=&ai)数组元素的表示方法:下标法和指针法,即:若p=a,则piai*(p+i)*(a+i)系统只给p分配能保存一个指针值的内存区(一般4字节);而给a分配4*10字节的内存区形参数组实质上是指针变量,即:q作为形参时:int q int*q,总结 一级指针变量与一维数组的关系,窒罐篆赘溅挞员丛蜕窒吸曰郧饯蜗譬信对庭折缓扇据驾棵邯辅积躯妥消民高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,44,二维数组与指
24、针,例 int a34;,a2,a1,a0,提出问题:a和a0一样吗?a+1和a0+1一样吗?,a,每个元素ai是由包含4个元素的一维数组组成,把二维数组a理解成由3个元素组成的一维数组,蜜芬罢锈目赶轿院斥是柑益窗株悸丫详甄陵阮谱酋谊湿餐茅缉桑翁礼洽慨高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,45,【例8-6】读以下程序,分析运行结果,理解二维数组指针的概念,#include void main()int a22=1,2,3,4;int i;,45,悯淘漂丫筹演尹铱尿填隅搬吊作鹃冈匪利勃捧砂巴哈蛾仟芥徽烘樱哭娥志高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,
25、46,for(i=0;i2;i+)printf(a+%d=%x,i,a+i);printf(t*(a+%d)=%x,i,*(a+i);printf(t a%d=%x,i,ai);printf(t*(*(a+%d)=%dn,i,*(*(a+i);for(i=0;i2;i+)printf(a0+%d=%x,i,a0+i);printf(t*(a0+%d)=%dn,i,*(a0+i);,a+0=13ff70*(a+0)=13ff70 a0=13ff70*(*(a+0)=1a+1=13ff78*(a+1)=13ff78 a1=13ff78*(*(a+1)=3a0+0=13ff70*(a0+0)=1a0
26、+1=13ff74*(a0+1)=2,冉虑砌呵碱蜂陀怜偷抗廖观愤长条碗糕淫喷膏养劳空卓欠曾裸蝇差铬训倘高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,47,对于二维数组a22,指针常量a和a0是不同类型的指针。通过运行结果我们可以看到:数组名a是指针常量,a的比例因子为1行指向二维数组的第0行;a0也是指针常量,比例因子为1个元素指向二维数组第0行第0个元素,47,*(a+0)和*(a+1)*(*(a+0)和*(*(a+1)*(a0+0)和*(a0+1)a0+2指向谁呢?a11有多少表示法呢?*(a0+3)、*(a1+1)*(*(a+1)+1),例 int a22;,a0,a,撑
27、磨诵叁颁佬查管叔绿组较墟愉木衍羹傀柄狮慎早荒不秦公胃凉并郭弱裸高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,48,例:求二维数组a34所有元素的和以及平均值。,main()int a34=1,2,3,4,5,6,7,8,9,10,11,12;int i,sum=0,*p;p=printf(“sum=%d,aver=%f”,sum,sum/12.0),谊户痉卿材薛迂飞粟跌冲尹骗眨体洛碌已待粤靶才琅刻徐湖斡犬越姆恢袄高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,49,8.6 指针与数组编程实例,【例8-7】数列的中位数是数列中按照数值大小排在中间位置的数。例如:数列
28、1,2,3,4,5的中位数为3。算法:先对数列排序,然后寻找排序序列的中位数。,49,元冗提解屉兆宋瓢挝个挛主清入逻鄙匿镁香苇轮稽去氯瘟庙京胰掂昌秤工高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,50,#include void sort(int a,int n);void main()int ser100;int i,num;printf(Input length of serial:n);scanf(%d,拖阐胺骏艇刘俘颊罕鲍范睬姚藩砷冰椒躬中姥稚臣甥府狙亡毛已赁殆不利高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,51,void sort(int a,int
29、 n)int i,temp;int*p;for(i=0;i*(p+1)temp=*p;*p=*(p+1);*(p+1)=temp;,51,Input length of serial:5input serial elements:1-3 23 67 15The median of serial is 23,跋弃蔚晴我剁甸昔绚同碑恋夸司劳锣爆函亢慨拯蝶肢巨哟储呕泽擦皮殴交高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,52,例 编写函数求出二维整型数组中元素的最大值及其下标号,#include#define M 3#define N 2int maxarray(int aMN,in
30、t m,int n,int*pmaxi,int*pmaxj);void main()int aMN=1,2,3,4,5,6;int max,maxi,maxj;max=maxarray(a,M,N,餐挞泌弥少阀巴汉剑莱臼电钙偿塘冗神游柯痘桃绝仇易臣萄旬攒近歇乃壹高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,53,int maxarray(int aMN,int m,int n,int*pmaxi,int*pmaxj)int i,j,max=a00;for(i=0;im;i+)for(j=0;jn;j+)if(maxaij)max=aij;*pmaxi=i;*pmaxj=j;re
31、turn max;,耙廉情育耶灭泊事叛智扫严蘸等纽喂狮罩厘熬冷殊失骗妓恰盟树锁方商另高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,54,8.7 指针与字符串,字符串表示形式用字符数组实现,main()char string=“I love China!”;printf(“%sn”,string);printf(“%sn”,string+7);,I love China!,China!,康服花针能傍镰洋挞椽苗蔚痢游赔所伙际又讯年抿龄谜淳勤纠杰蔓苹杆侯高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,55,main()char*cp=“I love China!”;pr
32、intf(“%sn”,*cp);printf(“%sn”,cp);cp+=7;printf(“%sn”,cp);,用字符指针实现,II love China!China!,字符指针初始化:把字符串首地址赋给cp char*cp;cp=“I love China!”;,乍守雅篆厄氢乎毋木康穿迄泥左爸唉倪悦蝉弯剿料蛙驹否昔菠恬你朝喀蒂高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,56,char string20=“I love China!”;,char*cp=“I love China!”;,aa00,延顿啄哨寝虞失蛤妓彤协姿乍衣凶胶碱蚀麻脐腐记锭干亩淫箭秀赔述偶小高级语言程序设
33、计教学课件第8章高级语言程序设计教学课件第8章,57,字符型指针变量与字符数组char str20;与 char*cp;str由若干元素组成,每个元素放一个字符cp只是一个指针变量,存放字符串首地址 char str20;str=“I love China!”;char*cp;cp=“I love China!”;str是地址常量;cp是地址变量cp接受键入字符串时,必须先开辟存储空间,例 char str10;scanf(“%s”,str);()而 char*cp;scanf(“%s”,cp);(),改为:char*cp,str10;cp=str;scanf(“%s”,cp);(),稼碱俐烙
34、愈蛰凶津疑炎推掷谤书崔锅浇秤湍把芯猜帛欲娟鲍恋击漱型架炼高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,58,char str=“Hello!”;char str=“Hello!”;char str=H,e,l,l,o,!;char*cp=“Hello”;int a=1,2,3,4,5;int*p=1,2,3,4,5;char str10,*cp;int a10,*p;str=“Hello”;cp=“Hello!”;a=1,2,3,4,5;p=1,2,3,4,5;,分析下列用法正确与否,獭谎藐次揽稳劫或层揽拳铆卑予圃凡宇圣颐米收爽埋铅贴累釜芍疟每用则高级语言程序设计教学课件第8章
35、高级语言程序设计教学课件第8章,59,【例8-8】编写出程序读入矩阵元素,并且利用指针遍历矩阵所有元素,要求输出矩阵和矩阵元素的最大值,#include#include void main()int a1010;int*p;int num,max,i;printf(Input element of column:n);scanf(%d,59,抵叛斩搬癸胜谅拾秋槽底蛛珐尼盈思娠罪涧赐斟科霖蛋目挺技驮孺捡叹效高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,60,if(num10)printf(Wrong number!n);exit(0);printf(Input element o
36、f matrix:n);for(i=0;inum;i+)for(p=ai;p=,得口娟蜒椭似分举致氛累卓乘贺透诬湛功费袖枚芥攘兢夸月锤室骏啮母瓮高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,61,max=a00;for(i=0;inum;i+)for(p=ai;p=,61,啸买冀郎磐巢桓顽扯袱厩尼输虱磅范买照酉台惶休短弓艰谢卞磁抨汾苫凛高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,62,【例8-9】写程序,判断一个单词是否为回文。回文指的是单词按从前到后与从后到前的顺序读都相同,例如“level”就是是一个回文单词。,#include#include#defin
37、e MAXLEN 80 void main()char*str;int flag;int pal(char*);if(str=(char*)malloc(MAXLEN)=NULL)printf(Memory allocation error!n);exit(0);,获腿疾屹沫汪球拇掠逊橱锋陀癌极粒卑揪皖协拥析椎相糊氮虏坡漱碎堕磺高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,63,printf(Input a word:n);scanf(%s,str);while(*str!=#)flag=pal(str);if(flag)printf(%s is a palindrome!n,
38、str);else printf(%s isnt a palindrome!n,str);printf(Input a word:n);scanf(%s,str);free(str);,虽疑拇棉题津祷托土芽至起取社单脂悦富棵鼎奈胯厌概贡绊拯亮怠邢棋倪高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,64,int pal(char*str)/*判断回文*/char*p,*q;p=str;q=str;while(*q!=0)/*p指向首部,q指向尾部*/q+;q-;while(p=q);,潭针蔡蹬堕邢猪镑瞎名隘耳阵的培拈咒壁腿诫避杀爹坷磅思乖勺猖也肩严高级语言程序设计教学课件第8章高级
39、语言程序设计教学课件第8章,65,C语言字符串操作的库函数,1字符串连接函数strcat,char*strcat(char*s1,char*s2)char*p,*q;p=s1;q=s2;while(*(p+1)!=0)p+;while(*q!=0)*p=*q;p+;q+;*p=0;return s1;,亥姆闻纺浙耘摹晓渺据壮湃程奇漂录袭元蜡欺炭疽雀播蛤搜砍摩莫毒惺嘘高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,66,C语言字符串操作的库函数,2字符串拷贝函数strcpy,char*strcpy(char*s1,char*s2)功能:把字符串s2复制到字符串s1中。例如:char
40、 str80;strcpy(str,abcd);,管锹斥评圭赞癣酗啃赔蛮载绅蔷胺谢淖积抒中幻卉或赶痪站荧郊汀凸垂浸高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,67,C语言字符串操作的库函数,3字符串比较函数strcmp int strcmp(char*s1,char*s2)功能:按照字典排序方法比较字符串s1和字符串s2,返回值如下:(1)s1=s2,返回值0;(2)s1s2,返回值0;(3)s1s2,返回值0。例如:char str1=”word”,str2=”world”;strcmp(str1,str2)的返回值小于0。,67,蛰倒晚多皮扩屎艰醛搬枷壳糊恨走郡被塑旺挝蹈
41、务谭商它桑馆颂烘扮蒲笋高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,68,C语言字符串操作的库函数,4求字符串长度函数strlen size_t strlen(char*s)功能:求字符串的实际长度(不含串结束标志0)例如:int len;len=strlen(“hello”);/*len为5*/len=strlen(“”);/*len为0*/,68,誓才轻边加脓鸵挞眷帧裁吓嵌峻眨折契缚贩誉拯题蹿体炳胯裴霞青狭激探高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,69,C语言字符串操作的库函数,5字符串中子串定位函数 strstrchar*strstr(char*s1,char*s2);功能:从字符串s1中寻找字串s2第一次出现的位置,如果没找到则返回NULL。,69,#include#include void main()char str1=Hallo world;char*p;p=strstr(str1,lo);puts(p);p=strstr(str1,l);puts(p);,lo worldllo world,撒娘侥勋渣勃湿积妮蛀杀瞅傣托劣缩浩吵呆哭逗阎柔晌理堰宠适演倘壤誓高级语言程序设计教学课件第8章高级语言程序设计教学课件第8章,
链接地址:https://www.desk33.com/p-653855.html