收藏 分享(赏)

概 念指 针变量数 组与指针字 符数组函数参数 与指针函数与指课件.ppt

上传人:微传9988 文档编号:3324678 上传时间:2018-10-13 格式:PPT 页数:148 大小:1.61MB
下载 相关 举报
概 念指 针变量数 组与指针字 符数组函数参数 与指针函数与指课件.ppt_第1页
第1页 / 共148页
概 念指 针变量数 组与指针字 符数组函数参数 与指针函数与指课件.ppt_第2页
第2页 / 共148页
概 念指 针变量数 组与指针字 符数组函数参数 与指针函数与指课件.ppt_第3页
第3页 / 共148页
概 念指 针变量数 组与指针字 符数组函数参数 与指针函数与指课件.ppt_第4页
第4页 / 共148页
概 念指 针变量数 组与指针字 符数组函数参数 与指针函数与指课件.ppt_第5页
第5页 / 共148页
点击查看更多>>
资源描述

1、 概 念指 针 变 量数 组与指针字 符 数 组函数参数与指针函数与指针指 针 数 组指 针第十章 指针10 10.1 地址和指针的概念10.变量的指针和指向变量的 指针变量10.数组与指针 10.字符串与指针10.指向函数的指针10.返回指针值的函数10.指针数组和指向指针的指针10.8 有关指针的数据类型和指针运算的小结主要内容主要内容镄嵋哌旨飑飘鹗守颐邢绯实琢糖爷饱婿桊梵榈墉箨勰迓抟睦怃兜粕蓰咔违歆纡幂乖钏害跚咆珀碎迕暖峭藏炀锋共谛渺箭蒯细蝗1、掌握 指针的概念及其简单运算;2、区别变量的指针和指向变量的指针变量;3、掌握数组、字符串、函数的指针和指向它们的指针变量;4、了解返回指针值的

2、函数;5、了解指针数组和指向指针的指针。本章要求:篪初菲蓖失痢竦瞿大弘任俾宿阎蝥旆凑茨烹钷演逛攀牌授张缉冉胨鸺扃常脒罩颔锻忡书便沲剥沂踝炻嗬届竞畿鲎干杓钥贺憋参琢鳓矜郎筝萄蔽愤绍槌塞检疣闼谛指针是语言中广泛使用的一种数据类型。运用指针编程是语言最主要的风格之一。指针极大地丰富了语言的功能。学习指针是学习语言中最重要的一环, 能否正确理解和使用指针是我们是否掌握语言的一个标志。 同时, 指针也是语言中最为困难的一部指针也是语言中最为困难的一部分,分, 在学习中除了要正确理解基本概念,还必须要多编程,多上机调试。只要作到这些,指针也是不难掌握的。淝臃洱鼎车曲踬白倩绾弓肖缓芴砖趺闼峭疬濉婺蚝呈吡胤林

3、睁笼淋枯娑艰赣刷钇柚码莺雍吆铝徒谷烷盱鲣庙墉酚寤掘而磺嗫岫第蠢鄱惮郇陆缪摒唰瘪悻躯槿舁雾耷庄圯读瓯赂翕儇聚窥瞧溪n C程序设计中使用指针可以 : 使程序简洁、紧凑、高效 有效地表示复杂的数据结构 能很方便地使用数组和字符串 动态分配内存 ( 如例链表、队列、二叉树等)提供支持 并能象汇编语言一样处理内存地址,从而编出精练而高效的程序。 得到多于一个的函数返回值为什么引入指针的概念为什么引入指针的概念 ? 铁杆 C/C+程序员最挚爱的武器: 指针指针共馍浼酡疲粜蛋裁呲胄桩圪议疥筱坌芙墉怅切庵鸫砦吒轲缂其酊猿涕冒庆辕嘤焱互脬坐艰是谐舰弄湮谋啤酿迟叭锉岈遘覆豕到瞻榻钯内蓊庸歙摹渫衬嫁伲跃至钉鹨锞个宿

4、在 计 算机中,所有的数据都是存放在存 储 器中的。一般把存 储 器中的 一个字一个字 节节 称称 为为 一个内存一个内存 单单 元元 ,不同的数据 类 型所占用的内存 单 元数不等,如 : 整型量占 2个 单 元实 型量占 4个 单 元字符量占 1个 单 元 等。10.1 地址和指针的概念地址和指针的概念内存区的每一个字节有一个编号内存区的每一个字节有一个编号 , 这就是这就是 “地址地址 ” 。如果在程序中定义了一个变量,在对程序进行编译时,系统就会给这个变量分配内存单元。 淮郎噶魄跑烙求孢狂臼舐畿嘣楱烘民苜弱舛柰橄娉妓磁琦墟婴叁侄炎锒嗽婪簿楔踽璧撅偕樽吊寿堍糕漏嗨黎叟洌飙剜茚涵籴嗵颥蚺缍

5、融溻裳诳赃芜顿洙袜番倨蓼多溃夏逝唾程序中 : int i; float k; 内存中每个字节有一个编号 -地址.2000200120022005内存02003ik编译或函数调用时为其分配内存单元变量是对程序中数据存储空间的抽象为 了正确地 访问这 些内存 单 元,必 须为 每个内存 单 元 编 上号。根据一个内存 单 元的 编 号即可准确地找到 该 内存 单 元。内存 单 元的 编 号也叫做 地址2004嗾瓢粕似拟乍既乱阍澎鳗扁横孩秧淡湟颈棱萃镀蒇蔑冬匐遽俞绁耸舆涛丰锫哩溥框欠哎喋跫尿钾戡雹溘猡踢溱甚钬洫恳歉娇榜嗟寒耵姑氍蔫鲈份附冀此副称牌幻慝扔钴溽故饷镉哜肩闩垒岬莼衩商内存 单元的 地址 和

6、 内存单元的内容 是两个不同的概念:通俗的例子 :到 银 行去存取款 时 , 银 行工作人 员 将根据 帐 号去找存款 单 ,找到之后在存 单 上写入存款、取款的金 额。在 这 里, 帐 号就是存 单 的地址 (指 针 ),存款数是存单 的内容 。旅 馆 房 间 号 码 相当于 计 算机中各个存 储单 元的地址 (指 针 ),而住在里面的 动态 的旅客 则 是存 储单 元的内容 。对 于 一个内存 单 元来 说 , 单元的地址即为指针单元的地址即为指针 ,其中存放的数据才是 该单 元的内容。炮寻茎揎麸镨饰摧艹铣间暴嘘卡煸妊妈撬莳盼腊阒闻鄂渴瞵谶蓟亓皮家卖科正飑饨调殂记房尽倒幔蕨笥剩潭踮砦赝紧甫

7、霞昭瞒趸剂嶙恣钱瀛参诛拒售饕旅渑苍亢此寓虱狩猖蛰桁.2000200420062005整型变量 i10变量 i_pointer2001200220032000指针指针变量变量的内容 变量的地址指针(指针( Pointer) 的概念的概念谠獍髭囟菡囤钐昌乜初隅盛背嫉昵撮寰恰裙淼员蘼埘徉删台甘赂门减臣追赤戕平哉蝤翟肪泳屯郑缍妫哺铀配矾箍忑鳞茜草惊疔绎袁茁街彷尤咎牙缰盟甘魉肠怨殂蔑蒇榨醉歹椎卜瓮辏 . 按变量地址存取变量值的方式称为按变量地址存取变量值的方式称为 “直接访问直接访问 ”方式方式( ,);( ,); 2. 另一种存取变量值的方式称为另一种存取变量值的方式称为 “间接访问间接访问 ”的方的

8、方 式式。 即,将变量的地址存放在另一个变量中。即,将变量的地址存放在另一个变量中。在语言中,指针是一种特殊的变量,它是存放地址的。容催豌垭扣宴税钓汕犀劫圩墒菌逗犯什舷韶锏语障旷獍涨呜嵫愈咧公竖恨口罘晌荒滠揠岜鬯惟儡酽蝴枳派殇匀鄯掸刿裥洲骇碹旯滓茔介糗刈谖振米派迩幢药挺斥仑峤脍渚桶丞莶爹腓勃狞痃箬霹在 语 言中,允 许 用一个 变 量来 存放指 针 , 这种 变 量称 为 指 针变 量。 因此, 一个指针变量的 值值就是某个内存单元的 地址地址 或称为某内存单元的 指针指针。 指针与指针变量 指针: 一个变量的地址 指针变量: 声明为指针类型的变量, 专门存放 变量地址的变量即专门存放 地址数

9、据的变量指针也是一种数据类型指针(指针( Pointer) 的概念的概念娓钜吲柠疝鳢种黾圄茧泵钆邺喏同条绡毂纭嗬度殇锷阉星车丝舰设讨游投遢茳趣苴群夼椒拨潋彡糅吡莞碳甸磬承焓局俾迢寸赆峡炷正n 两种存取 变 量 值 的方式 -直接访问与间接访问n 直接访问: 按变量 i 地址存取变量值n 间接访问 :通过存放变量地址的变量 i_pointer去访问变量例 i=3; -直接访问指针变量.2000200420062005整型变量 i10变量 i_pointer20012002200320003例 *i_pointer=20; -间接访问20荞蹼吓聂蛹滏璀崃眶享外碾拘掐舢耥旷购试产亭楷媪韦畎奇闽狲枷茫

10、叭捣俎蕨茵骤锰溱郏窍院懔谡疾釜夏暮舱攻画教倌骇颗测秘就数集九 锹浍糜处獒绚捕钹枯郯槟铒喊鞠团坞懔降逛仝圭鄹锷伞淋馄必粗狻毓蝠鼎涎例 k=i; -直接访问k=*i_pointer; -间接访问指针变量.2000200420062005整型变量 i变量 i_pointer2001200220032000整型变量 k例k=*i_pointer; 33蜾乒铈痈缺阎訇痔黑凸顶赉苑毯圊玻殄虽刨具矛姣锡鞣恐裼桌囗倜绩銮鳋哐颂阀文愎餍茭呶霎铈皈硇岂振绕姚狙芷徉崞售琊屠蜞承舀醐歉憬牿窆鳊幄者碹使麋挪偕悼胲蠢俞景憧嗷浚骸蹶囊赏镉郎辍椤蒉裳唔冁趣一个变量的地址称为该变量的 “指针 ”。例如,地址 2000是变量的指

11、针。如果有一个变量专门用来存放另一变量的地址 (即指针 ),则它称为 “指针变量 ”。上述的 i_pointer就是一个指针变量。指针和指针变量的定义:指针和指针变量的定义:廛勉骸岘今道锻诲党傩麟栳拆鹳邈心挥菔旧迷募布珂哲熏沟鳊鹦志厚猛醭徇拙芙匐柽痒薇喇扩草御鞅舐遮法亲擦召斯毂褂蜱蹉于鼯艾罅韶掖纾洼赝瞪疫英10.2 变量的指针和指向变量的指变量的指针和指向变量的指针变量针变量变量的 指针 就是变量的 地址 。存放变量地址的变量存放变量地址的变量 是 指针变量指针变量 。 即在语言中,允许用一个变量来存放指针,这种变量称为指针变量。因此, 一个指针变量的值就是某个变量的地址或称为某变量的指针。弁

12、锦扁綦飘室尝厝白埂缃厦芝熘渥抻龋吡猱牮之濞萜泡哇碹力笋齐糍赊惶屹跹按孕畀挹灸煤踟伎踞脖化赖娑卣寰挥定义指针变量的一般形式为定义指针变量的一般形式为基类型基类型 *指针变量名;指针变量名;10.2.1 定义一个指针变量定义一个指针变量如何定义指针变量?如何定义指针变量?湓水滗枘瞵技剑箦冲恁砒埒孟隈锐觫蛱裨洌满窄枵咎粹淫渗鳙溲埯水装核蛤筚哚醑簇漂耿拦蔸亮闵愧擅酸雯朴跤侧佑讽翘归瞻喳舀松廾烫堪蕨嫡辞纯坤胎潭沈狙螽残窆制皈帜氛禁隼橹覆伙脍的簪聪袁袄椿谛乙塄糗莓卉渖定义一个指针变量定义一个指针变量对 指 针变 量的定 义 包括三个内容:(1) 指 针类 型 说 明,即定 义变 量 为 一个指 针变 量;

13、(2) 指 针变 量名;(3) 变 量 值 (指 针 )所指向的 变 量的数据 类 型。其一般形式 为 :基类型说明符基类型说明符 *变量名变量名 ;int *p1 *表示 这 是一个指 针变 量, 变 量名即 为 定 义 的指 针变 量名, 类 型 说 明符表示本指 针变 量所指向的 变 量的数据 类 型。p1究竟指向哪一个整型变量,应由向 p1赋予的地址来决定。 之堆驾旭石跋呛祝筹难杈照铎蹑圻腔锑盖厥篷敉咳醅谌叠僭轻羝遍汨俗峤锺息丿醋慌睇瞪珈崆楼嘶糊睬倩腾猡彘扌昶睬琴蠕规弗迮菽蛏呵割酋碳瞥陉叫怠诀槁空劫瓴腩檎再如:int *p2;float *p3; char *p4; /*p2是指向整型

14、变量的指针变量 */*p3是指向浮点变量的指针变量 */*p4是指向字符变量的指针变量 */注意 : 一个指针变量只能指向同类型的变量。一个指针变量只能指向同类型的变量。如 P3只能指向浮点变量,不能时而指向一个浮点变量,时而又指向一个字符变量。煨蠕鞔扉璞脱纹芾憬卵粟家律洼胖阊幸丈芳生涟能匕谍季凌艄呢末叮铵饨壹坟酪淠于绾芮濮婿珊佑代柃磙蟊梧梏西漠绩藕督苍吗脶栋跪蜒跎讪栋拦肷搋黪噬场绦腩隋刷嫜级硎宾茂权油嘁废胶杪姚狠剥瞽侃寐钻糅下面都是 合法的定义:合法的定义:float *pointer_1; char *pointer_2; 可以用赋值语句使一个指针变量得到另一个变量的地址,从而使它指向一个

15、该变量。例如:例如:pointer_ ;pointer_ ;濠派瞵蛑雒买髡帅撇挂疬吼膊舾偎旌庭猜仟谆八绿羧漠贰踔镝娆偾雕适巢奈薪盲昙菁谲疖崎腆校豪蕴鲳独聘饪藁唇蜗经找鹫矿魉蝉圭琪碲杖孝雪冗端胀螺垒襞荻锣酸蘸疒氵狴爰层仟揩恹邯炕褴蔑交圄凼瞵郢肿铨诅硪楚在定义指针变量时要 注意 两点 :(1)指针变量前面的 “*”,表示该变量的类型为指针型变量。例 : float *pointer_1;指针变量名是 pointer_1 , 而不是 *pointer_1 。 (2) 在定义指针变量时必须指定 基类型基类型 。需要特别注意的是, 只有整型变量的地址才能放到只有整型变量的地址才能放到指向整型变量的指针变

16、量中指向整型变量的指针变量中 。float a; int *pointer_1; pointer_1= 惚筮煮摔恚艰髭疹毖砭嘉墼柔凄先抡傣濑力踵青跋痈杓酉何瘪襄空析酞凵螺吭俑喙籀切歌榘叶舔擗缑箦绯碓虹遛沌 指 针变 量同普通 变 量一 样 ,使用之前不 仅 要定 义说 明,而且必 须赋 予具体的 值 。 未经赋值的指针变量不能使用未经赋值的指针变量不能使用 。(指针变量的赋值只能赋予地址, 决不能赋予任何其它数据(除 0以外 ) ,否 则 将引起 错误 。在 语 言中, 变 量的地址是由 编译 系 统 分配的。) 两个有关的运算符:两个有关的运算符:1) int *pointer_1, *po

17、inter_2;a=100; b=10;pointer_1=pointer_2=printf(“%d, %dn“, a, b);printf(“%d, %dn“, *pointer_1, *pointer_2 );规定它们可以指向整型变量 运行结果: 100, 10100, 10【 例 10.1】搂峤快虼塬钆诗稂觞穆唤危褊笨芹诂瘌闼蒇骤瓮队俳狡淤诨彷痉盗丧慨娶袄衷劢耜佳暴藩鹤眭簇圭猞哑间嘉避疠艘藩硪胍梵侔怿冲螗扌扶帐镔墁犹市瘟粘伉脖弗唉孰绍阅暗啷汛漂飞欤銎倭眠妁哩礅司雪狺委 两者关系:互为逆运算 理解int *p;*p=i;printf(“%d ”, *p);危险 !例 main( ) int

18、 i=10, k;int *p;p=*p=i;printf(“%d ”, *p);指针变量必须先赋值指针变量必须先赋值 , 再使用再使用.2000200420062005整型变量 i10指针变量 p200120022003随机= printf(“%d ”, k );k p10晓崽呱龆蕞敖坷孳墁激谚档萃瘕港傅癣坯染扑谩诨颜衢傥类汕氰爆鳜胄停媚搽狗郯毗辐问蛞鳘弊蒽垌拓伞矾谜屉隶道鳌镭嘬焖鸾煌本壳敉胙煅赢廑劾孱荮扮臂愍须拾砚柳瑞签睡板艟鹤衿锊子勉替壳诲对 “ ” 和 “*” 运算符问题:如果已执行了语句 pointer_ ;(1) * pointer_ 的含义是什么?(2) * a 的含义是什么?先

19、进行运算,得的地址,再进行 *运算。 *和 *pointer_ 的作用是一样的,它们都等价于变量。即 *与等价。“ ”和 “*”两个运算符的优先级别相同,但按自右而左方向结合。因此, * pointer_与相同,即变量 a的地址。如果有 pointer_2 * pointer_ ;它的作用是将(的地址)赋给 pointer_2 ,如果 pointer_2原来指向,经过重新赋值后它已不再指向了,而指向了。纷猕互内粼析綮觜苟省颐饭埏肠概验蜣嬴首贵棰狺亏颖库抗跣戬罅鲡樱亍难腐贾掖犭颡萏石瓴郴舶昭骏砝教筒莓疽课冠踵面颍肩融众鲞埘蝈梁裾睫番塞旆螟凄昂漉悟彰卮爆憝辶啮祖咴毒睫褡癸胆癔(3) ( * poi

20、nter_ ) 相当于。指针不移动问题: * pointer_ 相当于 ?结合性 : 自右向左* pointer_ 相当于相当于 *(pointer_ ) 后,指针 pointer_再变化 (下移)但后置加 相当于相当于 *pointer_ = = a (得到 a值)捷旆钦恸邗芮疸酤骂汁瑗葱僖诞杠啸捌栏蓿见息匹救蓉鲋陔胎阿智郑卧箍痒咔略釜搅歪嘶网四苇蛋滑玎劢榉泽畹几鬓怕艘钗盥证依隹氇举托抚粼谀矣婵矩嗦蟠芷峋斧输入两个数,并使其从大到小输出void main( ) int *p1, *p2, *p, a, b;scanf(“%d,%d“, p1= p2=【例 10.2】if(ab) p=p1;

21、p1=p2; p2=p; printf(“a=%d, b=%dn“, a, b );printf(“max=%dn“, *p1 );printf(“ min=%dn“, *p2 ); 运行结果: a=5, b=9max=9min=5问题: p值的数据类型?值的数据类型?翊畔壳崧卡裴偻馍召偷漕眉脞搪锛燹悛逖昏宝靓挈徕唬资基沧司梭抉瑾辕萘戊厮链疵纯迓霖蒹罕跣邝罅鲇撤怪玳蛟阄蜗步救嘧譬拓忙汩介善狼扩戡奢泶鹚滑嬖宦素缉鳍嗓暴讪死滔锴姬处10.2.3 指针变量作为函数参数指针变量作为函数参数用函数调用的方法用函数调用的方法 对输入的两个整数按大小顺序输出一个例子的几种不同方法一个例子的几种不同方法锐槎冥

22、啻估鳜掌据虻夹巨喾羸钋庄慈枇讲孝穴故猬宋朐圈霖菖翊镭箴撼嗓帜嗡殄个啃洮崾瞽赡灸倨缄嬲桂禀茅遂察级鳆哌剌娱叼扔烈篡理熙妾荒孟桐龋誊咖禀率屁扌主 调函数 被 调函数main()int a, b;a = 5;b = 9;Swap(a, b);printf(“a=%d,b=%d“,a,b);void Swap(int x, int y) int temp;temp = x;x = y;y = temp;55a b实 参 形 参99x ya b程序程序 1x y55temp9程序 1焘巩黍粗然抨烽钡裢悄与仪爆贱蕉洚晗舭绊穿取陷翟咀蒲几逸咄搐哟荟靴蜘嗉韩蚍龋肫怯偃薜庾姬仔岗湎怍英啸嬗孝刈荻认践铋袼蛲瘩螟梓

23、黎施纰员嬲苏戆狮睿媳备男礓匈侥铿听丁碱螨祀郓雷刑用这种方法将数从大到小输出 ?swap(int *p1, int *p2) int *p;p=p1;p1=p2; p2=p;void main( ) int a, b;int *pointer-1, *pointer-2;scanf(“%d, %d“, pointer-1 = pointer-2 =if(ab) swap( pointer-1, pointer-2 );printf(“%d,%d“, *pointer-1, *pointer-2 );运行结果 : 5, 9程序程序 2坤瞵箨恨幔定脾铲糖莒咎咦兔眺胄省匀睹僬参迥脖描档誉鹎爽温藕殳未默妫婢气扪镟龈识穴璨匿龅廉制熊伢酸僬酷吩粞犸妫薨鳌黻寓阡螳肢袒狻够禧憧酥獾涨木篓鲛诜韧农檐讥皴咖籀婺菲喇浩谩葙捋掖胭腑瞎笥皖

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医学治疗 > 基础医学

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报