高级语言程序设计教学课件第8章.ppt
《高级语言程序设计教学课件第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章高
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 高级 语言程序设计 教学 课件

链接地址:https://www.desk33.com/p-653855.html