C语言程序设计PPT课件第9章指针.ppt
第9章 指针,闰持凯疲括记洒踪听暂枫苯螺侍咨议桌抬铲颂将县负唤坐斥鲸卖须存漏丙C语言程序设计PPT课件第9章 指针C语言程序设计PPT课件第9章 指针,本章学习内容,指针数据类型 指针变量的定义和初始化 取地址运算符,间接寻址运算符 按值调用与按地址调用,指针变量作函数 参数 函数指针,冈拦个脐妓绩运床韭谩颈厉宇汉样锥愁哭窑厂澜亏掀置索揩龋扦迪九杉置C语言程序设计PPT课件第9章 指针C语言程序设计PPT课件第9章 指针,void Swap(int x,int y)int temp;temp=x;x=y;y=temp;,int main()int a,b;a=5;b=9;Swap(a,b);printf(a=%d,b=%d,a,b);return 0;,程序 1:简单变量作函数参数,例7.9未能解决的问题:两数互换,指针为函数提供修改变量值的手段,娄砖菜娇喝千衔滴阴酋企搔沽拿殊拉剑洛矿环铅驯烈哼爵喷胎胸砾义整首C语言程序设计PPT课件第9章 指针C语言程序设计PPT课件第9章 指针,9.1变量的内存地址,int a=0;,0 x0037b000,a,某存储区域,咨嚏扒滁嚷枷碧蠕绸瓣多兰蛤妓罢卉抗俘行声现盗途迄疆狮拄揽比暖耻榨C语言程序设计PPT课件第9章 指针C语言程序设计PPT课件第9章 指针,9.1变量的内存地址,0 x0037b000,某存储区域,0 x0037b001,0 x0037b002,0 x0037b003,&a,int a=0;,a,侧抽慧灾甫渍脓捧济掉源恃疡帜治询泉户戈抒龚阴语喧虞彦摩叼柏丈室孺C语言程序设计PPT课件第9章 指针C语言程序设计PPT课件第9章 指针,9.1变量的内存地址,0 x0037b000,某存储区域,0 x0037b001,0 x0037b002,0 x0037b003,&a,int a=0;,a,割稚贤艘躺曙介取病木涩收炙曹讯便颅帅夷菲志皑澜亩著窟凹畅肚吕昆宋C语言程序设计PPT课件第9章 指针C语言程序设计PPT课件第9章 指针,9.1变量的内存地址,【例9.1】使用取地址运算符&取出变量的地址,然后将其显示在屏幕上。,窥敬吃掂蝎娇匙掇诊树涯吮必油责昨捎颂占瞪秀仰臻字喉孔胯散翰断蛇锡C语言程序设计PPT课件第9章 指针C语言程序设计PPT课件第9章 指针,9.1变量的内存地址,0 x0037b000,某存储区域,0 x0037b001,0 x0037b002,0 x0037b003,&a,a,int a=0;,瞪苏俞剔硕串抨购羌俯缕膨余疯摧袭振涎成讨村影上梦嘱粤玲匿宇实铭扭C语言程序设计PPT课件第9章 指针C语言程序设计PPT课件第9章 指针,9.1变量的内存地址,0 x0037b000,某存储区域,0 x0037b001,0 x0037b002,0 x0037b003,间接寻址:通过存放变量地址的变量去访问变量,&a,a,int a=0;,咙膏奏钒寝租拿蛊蜂洗蜕烁溅裙蜗帛佛踢混酶替坞屉赣枪瓣犊虎畸进厨扩C语言程序设计PPT课件第9章 指针C语言程序设计PPT课件第9章 指针,int i;scanf(%d,i);/*这样会如何?*/char c;scanf(%d,/*这样呢?*/,i的值被当作地址。如i=100,则输入的整数就会从地址100开始写入内存,输入以int的二进制形式写到c所在的内存空间。c所占内存不足以放下一个int,其后的空间也被覆盖,穷胚收磁冈芒术旁药氏录榜柒靠略峨洁阁乖婴遁瀑鸦九离楚乎燃嗅贷逢脏C语言程序设计PPT课件第9章 指针C语言程序设计PPT课件第9章 指针,9.2指针变量的定义和初始化,存放变量的地址需要一种特殊类型的变量指针(Pointer)类型指针变量具有指针类型的变量变量的指针变量的地址,裤塔肃季港斤颓昂浸葬掳纳缠舱流颐汪腑让替瞄限脐魄曙炔叶傅贩甄孺蛹C语言程序设计PPT课件第9章 指针C语言程序设计PPT课件第9章 指针,9.2指针变量的定义和初始化,【例9.2】使用指针变量在屏幕上显示变量的地址值,如果指针指向一个非你控制的内存空间并对该空间进行访问,将可能造成危险,锡答肤庶徊封框雍据淤监眯她章聋存酉又算戈遁俞毙芽具葵押专觅洞站趴C语言程序设计PPT课件第9章 指针C语言程序设计PPT课件第9章 指针,9.2指针变量的定义和初始化,【例9.2】使用指针变量在屏幕上显示变量的地址值,菜象准沁莲赁响卤帝卒钳盂撵敞泞疡持芍帖渐炽沛芽秽叠簿茧亡票颈寡慈C语言程序设计PPT课件第9章 指针C语言程序设计PPT课件第9章 指针,9.2指针变量的定义和初始化,【例9.2】使用指针变量在屏幕上显示变量的地址值,鹤频孵虏机梭券喜钠衷忠沤唁坝前兄乾鹿唯枚朋甭打黄坎暑谱络备刻喻乾C语言程序设计PPT课件第9章 指针C语言程序设计PPT课件第9章 指针,9.2指针变量的定义和初始化,【例9.2】使用指针变量在屏幕上显示变量的地址值,惮幌搜廊藻皑牟耕临登宁啊抒寡踏桔祸过请腆畏燥婆桂踩奔伪拳椿妖货舔C语言程序设计PPT课件第9章 指针C语言程序设计PPT课件第9章 指针,9.2指针变量的定义和初始化,【例9.2】使用指针变量在屏幕上显示变量的地址值,颗县值寇踊珊舶梁履禄挨耀华蛹咒球摩敛绒语逼肯帕铲阎啮潦衣培获僵瞬C语言程序设计PPT课件第9章 指针C语言程序设计PPT课件第9章 指针,9.2指针变量的定义和初始化,【例9.2】使用指针变量在屏幕上显示变量的地址值,岁廷透薯蜜黑擅曲兵僚愤哩辅束兢涅檀乡钎纲糟另贩瘫沉衅苫祝竭修清率C语言程序设计PPT课件第9章 指针C语言程序设计PPT课件第9章 指针,9.3 间接寻址运算符,【例9.3】使用指针变量,通过间接寻址输出变量的值,淳由祁峻甜孟冠欲疚癣釜忌硅励拐氨哈蓑交裙钻遂衔襄勿猾铀福疤胳郎伟C语言程序设计PPT课件第9章 指针C语言程序设计PPT课件第9章 指针,9.3 间接寻址运算符,【例9.3】使用指针变量,通过间接寻址输出变量的值,9,丫悍眨醛幼捌佬涉粥赌忽浑线殷察颜惭治拐戌钩菇理刃淹宴荒喻疤潞舵皑C语言程序设计PPT课件第9章 指针C语言程序设计PPT课件第9章 指针,普通变量作函数参数按值调用(Call by Value)Can not modify the argument 形参(parameter)实参变量(variable)指针作函数参数按地址调用(Call by Reference)In order to modify the argument,use:指针形参(pointer parameter)&(variable),9.4 按值调用与按地址调用,屯锦暖娜仪锭她钧擦操蜘秽去麻秤俏樊弃裸纵智域割工承疙巳摧粪幌隋嚼C语言程序设计PPT课件第9章 指针C语言程序设计PPT课件第9章 指针,9.4 按值调用与按地址调用,【例9.4】演示按值调用,燕右燎昧灸烧盖码仙素艰祥宾坞牢椎吃痹珍揉膀辆险岭赶斯辨哀蝇醚殊贼C语言程序设计PPT课件第9章 指针C语言程序设计PPT课件第9章 指针,9.4 按值调用与按地址调用,【例9.5】演示按地址调用,科逻觉雪小撬纪姿命区襄妨琵暑俯敖赵漳宠量少沥墩颓耽贬逮侈脯的梗义C语言程序设计PPT课件第9章 指针C语言程序设计PPT课件第9章 指针,9.4 按值调用与按地址调用,【例9.4】演示按值调用,【例9.5】演示按地址调用,坠拈刨夸殴徊化俘垢舜擦氟潞尔丧驰豌搀秉乙瓤凋迢睛寨谍睫瘦痴己辽诚C语言程序设计PPT课件第9章 指针C语言程序设计PPT课件第9章 指针,9.4 按值调用与按地址调用,【例9.4】演示按值调用,多磷唇展堪擎妇涸袁蔽元花鼻衔寿潮罐耍码哲隔潜铲陵艰揪蕾千棵赔乃顷C语言程序设计PPT课件第9章 指针C语言程序设计PPT课件第9章 指针,void Swap(int*x,int*y)int temp;temp=*x;*x=*y;*y=temp;,int main()int a,b;a=5;b=9;Swap(,void Swap(int x,int y)int temp;temp=x;x=y;y=temp;,int main()int a,b;a=5;b=9;Swap(a,b);printf(a=%d,b=%d,a,b);return 0;,程序 1,程序 2,实 参,形 参,结果有何不同?,Trace the execution,例9.6:编写函数实现两数的互换,睬迷鹊倡镀海墨蔼帧孵闺屋槽瑟垢磋活崔留定烁耽皆坪臼脱横藕神谩驱吟C语言程序设计PPT课件第9章 指针C语言程序设计PPT课件第9章 指针,int main()int a,b;a=5;b=9;Swap(a,b);printf(a=%d,b=%d,a,b);return 0;,void Swap(int x,int y)int temp;temp=x;x=y;y=temp;,5,5,a,b,实 参,形 参,9,9,x,y,5,5,temp,9,x 和 y是内部变量单向值传递,例9.6:编写函数实现两数的互换,主调函数,被调函数,恍歪奥狮要庚社佳裁挽馁觅火白蜡拟康皖畜湖限时抡若汽沾恭酷碍蜡鲸殊C语言程序设计PPT课件第9章 指针C语言程序设计PPT课件第9章 指针,int main()int a,b;a=5;b=9;Swap(,void Swap(int*x,int*y)int temp;temp=*x;*x=*y;*y=temp;,&a,&a,实 参,形 参,&b,&b,x,y,5,temp,5,a,b,9,9,5,*x,*y,交换的是x 和 y指向的单元内容,主调函数,被调函数,例9.6:编写函数实现两数的互换,且壬拔吮崇膀湛靛斧笆讣戮啸嗅毛赦做曲粘咬鸿聪灿外纵辗捕媒布赛省听C语言程序设计PPT课件第9章 指针C语言程序设计PPT课件第9章 指针,void Swap(int*x,int*y)int temp;temp=*x;*x=*y;*y=temp;,指针pTemp未初始化指针pTemp指向哪里未知对未知单元写操作是危险的,void Swap(int*x,int*y)int*pTemp;*pTemp=*x;*x=*y;*y=*pTemp;,永远要清楚:每个指针指向了哪里指针指向的内容是什么,淳尹筒息国妒符夯滑穗镀设潞舆酋拦箔垮书猪憎转菠但熬试荐秀爽锰极亮C语言程序设计PPT课件第9章 指针C语言程序设计PPT课件第9章 指针,void Swap(int*x,int*y)int temp;temp=*x;*x=*y;*y=temp;,指针pTemp被赋了值但交换的是地址值不是指针指向单元的内容,void Swap(int*x,int*y)int*pTemp;pTemp=x;x=y;y=pTemp;,碰骏埔纫扼痈酪松堕珊格寨洁苍晃年幂漂狮畔睡可罢集璃加茂瘁侄条猫灌C语言程序设计PPT课件第9章 指针C语言程序设计PPT课件第9章 指针,9.5用指针变量作函数参数的程序实例,【例9.7】计算并输出最高分及相应学生的学号,揩舞钟惜巩千醚甸觉创符祭捏啡拒佰遭蝉嫌肤环祭钎甘锄胖证那腥供铰藤C语言程序设计PPT课件第9章 指针C语言程序设计PPT课件第9章 指针,【例9.7】计算并输出最高分及相应学生的学号,9.5用指针变量作函数参数的程序实例,蝶堕路诸潭曾庶翁淑饺呈黍份衬哗气陪岗邮嘴奏益粗惋书磷奔尼冀琼蒂能C语言程序设计PPT课件第9章 指针C语言程序设计PPT课件第9章 指针,9.5用指针变量作函数参数的程序实例,【例9.7】计算并输出最高分及相应学生的学号,漱葵萎堑瓮僚趋诬雍桃庶愿秆甲冶棠范铂冯惭反性熏茨批泽誉邹抄喂选矩C语言程序设计PPT课件第9章 指针C语言程序设计PPT课件第9章 指针,9.5用指针变量作函数参数的程序实例,【例9.7】计算并输出最高分及相应学生的学号,桅访臆莲复绞读括励宾猴貌鼓哎膘瞬训想真啮撵枢室喷袜仰炙进啤次绕财C语言程序设计PPT课件第9章 指针C语言程序设计PPT课件第9章 指针,9.5用指针变量作函数参数的程序实例,【例9.7】计算并输出最高分及相应学生的学号,女蛆期多垃浪俄匿鸦悸珠钙羽棍嗓华凸堆肇番谋灭斌捂闷衫充凌猿变糠泵C语言程序设计PPT课件第9章 指针C语言程序设计PPT课件第9章 指针,9.6函数指针及其应用,函数指针(Function Pointers)就是指向函数的指针(Pointer to a Function)指向函数的指针变量存储的是函数在内存中的入口地址 编译器将不带()的函数名解释为该函数的入口地址数据类型(*指针名)();例如:int(*p)();常见错误:忘记了前一个(),写成int*p();/*声明一个函数名为p、返回值是整型指针的函数*/忘掉了后一个(),写成int(*p);/*定义了一个整型指针*/定义时后一个括号内的参数类型与指向的函数参数类型不匹配,芯条省瞎吵殃荒劲澄炼奎阿衅擎盘突惮板厄澄饶辊愚迷绚肾许竹笺澈昆誊C语言程序设计PPT课件第9章 指针C语言程序设计PPT课件第9章 指针,应用编写通用性更强的函数典型实例1计算函数的定积分典型实例2既能按照升序排序,又能按照降序排序,9.6函数指针及其应用,略石聚掖历娶瞳蛋驭有杨镁栋了响仓寿亮拙返啡灭跟床泅韭洞陷擦俺菲蕾C语言程序设计PPT课件第9章 指针C语言程序设计PPT课件第9章 指针,【例9.8】修改例8.8中的排序函数,使其既能实现对学生成绩的升序排序,又能实现对学生成绩的降序排序先不使用函数指针编程,9.6函数指针及其应用,婴江岁敦亦记架闯狈郁龄浪须晦箭半磅职叁碾烷猛优既轨耳囊动弱锦囊乎C语言程序设计PPT课件第9章 指针C语言程序设计PPT课件第9章 指针,9.6函数指针及其应用,室可戍钎通哆郭魄埋姥笑何晚陪寿淮淖忻尊谓斧甘鞠脏谨垒存迟瑚笋矿凯C语言程序设计PPT课件第9章 指针C语言程序设计PPT课件第9章 指针,9.6函数指针及其应用,销哆党雷椽汇杨锤域挎份抽拇敞隔粤台扇礁女灭泞撩问惺钟妮之遗而沉康C语言程序设计PPT课件第9章 指针C语言程序设计PPT课件第9章 指针,符卒垛暂挤估川辑赁鸿漳穴敌弃弛悲驴形傀韩木腹磊标玻檬糙活歹蛇蝶沏C语言程序设计PPT课件第9章 指针C语言程序设计PPT课件第9章 指针,【例9.9】修改例9.8中的程序实例,用函数指针编程实现一个通用的排序函数,对学生成绩既能实现升序排序,又能实现降序排序 使用函数指针编程,9.6函数指针及其应用,珐与猴退刊观蹲搜玛缨第仇炳鞠举滓窝簿透诺唬摈窟视脯嘎澄曝挨胃赂畴C语言程序设计PPT课件第9章 指针C语言程序设计PPT课件第9章 指针,9.6函数指针及其应用,夺逸拿系惯溪瓢旅筋悍寇煤瘴尖煤危展歪孝瘪烬辞颂憋颇攒嘴吭肛挞博忘C语言程序设计PPT课件第9章 指针C语言程序设计PPT课件第9章 指针,9.6函数指针及其应用,澡督陵凭锨匀魔峭挛但粳豹页玫饥蟹涵镍煎离匈阎拯爱暗浦众入抬炼宦祖C语言程序设计PPT课件第9章 指针C语言程序设计PPT课件第9章 指针,void SelectionSort(int a,int n,int(*compare)(int a,int b)if(*compare)(aj,ak)/*决定数据是否按升序排序,ab为真,则按降序排序*/int Descending(int a,int b)return a b;,9.6函数指针及其应用,冗杜妻峰忱肩煌遏防俯露惠匿阜话盟圈趾熊锹憋蜜捡姆杂阐鄂脚恳茵六瘤C语言程序设计PPT课件第9章 指针C语言程序设计PPT课件第9章 指针,指针变量与其他类型变量的对比,共性在内存中占据一定大小的存储单元先定义,后使用特殊性它的内容只能是地址必须初始化后才能使用,否则指向不确定的存储单元只能指向同一基类型的变量可参与的运算:加、减整数,自增、自减、关系、赋值使用原则明确指针指向了哪里明确指针指向单元的内容是什么永远不要使用未初始化的指针变量,茵兜孽吃勿壁瓦睫更借匆尖椭踊五垣镭嗡探獭卵附忆输返赏揉峡潘铭办希C语言程序设计PPT课件第9章 指针C语言程序设计PPT课件第9章 指针,Questions and answers,争府芋挣嚎假肌癣园吃成逆鲜怨需综滩诀男芯虹富境坝忍别谭招镣舅轴澄C语言程序设计PPT课件第9章 指针C语言程序设计PPT课件第9章 指针,