




已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2020 2 23 1 第十章指针 Pointer 指针的概念指针变量和指针运算指向数组的指针指向字符串的指针指向函数的指针指针数组 2020 2 23 2 变量与地址 程序中 shortinti floatk 内存中每个字节有一个编号 地址 i k 编译或函数调用时为其分配内存单元 变量是对程序中数据存储空间的抽象 2020 2 23 3 10 1地址和指针的概念 指针变量和指针 内存单元的地址与内存单元的内容是不同的 地址 内存的每一个字节有一个编号 指针变量 是保存内存地址的变量 是变量的基本类型之一 P37 指针 就是地址 2020 2 23 4 使用指针可以获得紧凑 高效的代码内存的动态分配 内存地址的直接处理指针与数组关系密切复杂数据结构的简洁表达 对指针的灵活应用 是C的一个重要特色 使用指针也可能使程序难懂指针操作容易出错 2020 2 23 5 10 2变量的指针和指向变量的指针变量 int iPtr iPtr是一个仅能指向整形变量的指针变量float fPtr fPtr是一个仅能指向实形变量的指针变量 i pointer 3 2020 2 23 6 直接访问与间接访问直接访问 按变量地址存取变量值间接访问 通过存放变量地址的变量去访问变量 例i 3 直接访问 3 例 i pointer 20 间接访问 20 2020 2 23 7 例main inti 10 int p p i printf d p 危险 例main inti 10 k int p p 指针变量必须先赋值 再使用 2020 2 23 8 1 运算符 将整型变量y的内存地址赋给指针变量yPtr 指针运算符 2 运算符 间接访问运算符或指针运算符返回其操作数 指针变量 所指向对象的值 单目运算符 它的操作数只能是指针变量 printf d yPtr 输出结果 5 2020 2 23 9 eg10 1通过指针变量访问整型变量 includevoidmain inta b int pointer 1 pointer 2 a 100 b 10 pointer 1 100 10100 10 2020 2 23 10 eg10 1 2020 2 23 11 eg10 2 输入两个整数 按先大后小的顺序输出 voidmain int p1 p2 p a b scanf d d 59 a 5 b 9max 9 min 5 2020 2 23 12 指针变量作为函数参数 voidmain inta b int x y scanf d d voidswap int p1 int p2 inttemp temp p1 p1 p2 p2 temp eg10 3要求同eg10 2 a a b 1 4 4 1 b a b x y p2 p1 相当于两个函数返回值 2020 2 23 13 includevoidswap int p1 int p2 voidexchange int q1 int q2 int q3 voidmain int p1 p2 p3 a b c scanf d d d voidexchange int q1 int q2 int q3 if q1 q2 swap q1 q2 if q1 q3 swap q1 q3 if q2 q3 swap q2 q3 voidswap int p1 int p2 inttemp temp p1 p1 p2 p2 temp t eg10 4 cpp输入三个数 按大小顺序输出 传递地址 数据传递双向 2020 2 23 14 小结 一 函数传递参数的方式1 传值调用 1 调用函数将参数变量的值传递给被调用函数 2 被调用函数通过retutn语句将一个值返回给调用函数 2 传地址调用 1 调用函数将参数变量的地址传递给被调用函数 2 被调用函数使用指针运算符 来修改变量的值 二 传地址调用的使用方法把地址作为参数的函数必须将函数的参数定义为指针变量 2020 2 23 15 10 3数组与指针一指向数组元素的指针 例intarray 10 int p p 数组名是表示数组首地址的地址常量 p array 2020 2 23 16 二 通过指针引用数组元素 inta 10 int p a 1 p 1指向下一个元素 不是p的内容加1 0200 0201 错 2 p i 和 a i 就是a i p i 代表p i d是a i 的地址 3 指向数组的指针变量也可以带下标p i 与 p i 等价 引用数组元素有各种方法 1 下标法a i 2 指针法 a i 或 p i 其中p a 2020 2 23 17 数组元素表示方法 变址运算符a i a i a i p i p i a i eg10 5 三种方法p231 2020 2 23 18 须注意的问题 1 自加 在循环中利用p 指向不同元素数组名与指针变量的区别 指针变量是变量 数组名是指针常量 不可改变 a 2 初值 p a 每一次循环开始前 应当使指针初始化eg10 63 超界 若不初始化会出现p 指向数组之外 2020 2 23 19 eg10 6 cpp includevoidmain int p i a 10 p a for i 0 i 10 i scanf d p printf n for i 0 i 10 i p printf 4d p p a 2020 2 23 20 指针的运算指针变量的赋值运算p 指针变量p2值 p1 不能把一个整数 p 也不能把p的值 整型变量 如inti p p 1000 i p 2020 2 23 21 指针的算术运算 p i p i d i为整型数 d为p指向的变量所占字节数 例p指向float数 则p 1 p 1 4 例p指向int型数组 且p 则p 1指向a 1 例inta 10 int p 例inta 10 int p1 2020 2 23 22 五 用数组名做函数实参 传递数组的首地址 数组名作为实参是数组首地址数组名作为形参是指针变量函数首部 f intx intn f int x intn 是等价的 p235 voidmain inta 10 num f a num 2020 2 23 23 用循环处理 设两个位置变量 i j i的初值为0 j的初值为n 1i 0 1 2 n 1 2j n 1 i eg10 7 c 将数组中n个整数按相反顺序存放 2020 2 23 24 例将数组a中的n个整数按相反顺序存放 实参与形参均用数组名 voidinv intx intn intt i j m n 1 2 for i 0 i m i j n 1 i t x i x i x j x j t voidmain inti a 10 3 7 9 11 0 6 7 5 4 2 inv a 10 printf Thearrayhasbeenreverted n for i 0 i 10 i printf d a i printf n m 4 2020 2 23 25 例将数组a中的n个整数按相反顺序存放 voidinv int x intn intt p i j m n 1 2 i x j x n 1 p x m for i p i j t i i j j t main inti a 10 3 7 9 11 0 6 7 5 4 2 inv a 10 printf Thearrayhasbeenreverted n for i 0 i 10 i printf d a i printf n 实参用数组名 形参用指针变量 2020 2 23 26 例将数组a中的n个整数按相反顺序存放 voidinv int x intn intt i j p m n 1 2 i x j x n 1 p x m for i p i j t i i j j t main inti a 10 p a for i 0 i 10 i p scanf d p p a inv p 10 printf Thearrayhasbeenreverted n for p a p a 10 p printf d p 实参与形参均用指针变量 2020 2 23 27 例将数组a中的n个整数按相反顺序存放 voidinv intx intn intt i j m n 1 2 for i 0 i m i j n 1 i t x i x i x j x j t main inti a 10 p a for i 0 i 10 i p scanf d p p a inv p 10 printf Thearrayhasbeenreverted n for p arr p arr 10 p printf d p 实参用指针变量 形参用数组 2020 2 23 28 voidsort intx intn inti j k t for i 0 ix k k j if k i t x i x i x k x k t voidmain inta 10 p i p a for i 0 i 10 i scanf d p p a sort p 10 for p a i 0 i 10 i printf d p p eg10 9选择法排序 int x sort a 10 2020 2 23 29 10 4字符串与指针 一 字符串的表示形式 1 用字符数组存放一个字符串 2 用字符指针指向一个字符串 voidmain charstr 1 Hello World printf s n str 1 voidmain char str 2 Hello World printf s n str 2 字符指针初始化 把字符串首地址赋给str 2 char str 2 str 2 Hello world 2020 2 23 30 eg10 17 c将字符串a复制到b includevoidmain chara Iamaboy b 20 inti for i 0 a i 0 i b i a i b i 0 printf stringais s n a printf stringbis for i 0 b i 0 i printf c b i printf n 2020 2 23 31 includevoidmain chara Iamaboy b 20 p1 p2 inti p1 a p2 b for p1 0 p1 p2 p2 p1 p2 0 printf stringais s n a printf stringbis for i 0 b i 0 i printf c b i printf n eg 10 18 2020 2 23 32 二 字符指针做函数参数 将字符串从一个函数传到另一个函数 可以采用 地址传递 字符指针变量和数组名 相同 均可指向字符串的起始地址 区别 字符指针变量可进行自加自减 而数组名不行 2020 2 23 33 例用函数调用实现字符串复制eg10 19 1 用字符数组作参数 2 用字符指针变量作参数 voidcopy string charfrom charto inti 0 while from i 0 to i from i i to i 0 main chara Iamateacher charb Youareastudent printf string a s nstring b s n a b copy string a b printf nstring a s nstring b s n a b voidcopy string char from char to for from 0 from to to from to 0 main charfrom Iamateacher charto Youareastudent char a from b to printf string a s nstring b s n a b copy string a b printf nstring a s nstring b s n a b 2020 2 23 34 三字符指针变量与字符数组的讨论char cp 与charstr 20 数组str由若干元素组成 每个元素放一个字符 而cp中存放字符串首地址charstr 20 str IloveChina char cp cp IloveChina str是地址常量 cp是地址变量cp接受键入字符串时 必须先开辟存储空间 例charstr 10 scanf s str 而char cp scanf s cp 改为 char cp str 10 cp str scanf s cp 2020 2 23 35 10 5函数的指针 一个函数在被调用时被分配给一个入口地址 称为函数的指针 函数名即为其入口地址 一 用函数指针变量调用函数 用一个指针变量指向该函数就可以调用它 基类型 指针变量名 函数参数列表 如 int p int int 指向函数的指针 函数只有入口地址 不能用p 1表示下一
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2025学年高中语文第5单元祭十二郎文练习含解析新人教版选修中国古代诗散文欣赏
- 行政管理中的战略思维试题及答案指南
- 2025年回迁房买卖合同协议书
- 2025购物中心租赁合同
- 市政学课程设计的创新点试题及答案
- 2025年大量农产品买卖合同标准范本
- 工程项目交付方式研究试题及答案
- 2025智能安防联网报警监测服务合同
- 2025企业办公场地租赁合同协议
- 行政管理的科学决策工具试题及答案
- 荆防颗粒课件介绍
- 2025届内蒙古包头市重点中学高考英语考前最后一卷预测卷含解析
- 《民间艺术之剪纸》课件
- 《重大火灾隐患判定规则》知识培训
- 拟投入的勘察设计人员、设计机构设置和岗位职责
- 高压燃气管道工程定向钻穿越施工方案
- 未成年离异孩子改姓协议书范文(2篇)
- 2024年4月医学装备质量管理情况简报
- 矿井通风模拟设计-冯树鸣
- 耳石症的诊断与治疗
- 企业形象设计(CIS)战略策划及实施计划书
评论
0/150
提交评论