C语言指针与数组教程PPT_第1页
C语言指针与数组教程PPT_第2页
C语言指针与数组教程PPT_第3页
C语言指针与数组教程PPT_第4页
C语言指针与数组教程PPT_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第9章指针 主讲教师 孙运雷计算机与通信工程学院计算机科学系sunyunlei教学要求 理解地址与指针的概念熟悉指针变量的定义与使用理解数组与指针的关系P27利用指针返回多个值了解指针的应用 本章主要内容 引子 swap函数的例子值传递 修改的只是副本那么传地址可行么 includevoidswap inta intb inttemp a a b b temp intmain inta 3 b 6 swap a b 传地址 swap 问题 思路可行否 怎么改 1 swap函数形参2 如何根据地址取到值 includevoidswap intx inty printf 调用时 x地址为 p 值为 d n voidswap int x int y printf 调用时 x地址为 p 值为 d n x x printf 调用时 y地址为 p 值为 d n y y inttemp temp x x y y temp 变化 1 形参用 表示传递了地址 2 x和y是地址类型3 从地址取值用了 操作符 本章主要内容 地址与指针的概念 一 地址在计算机中 把内存区划分为一个一个的存储单元 每个单元为一个字节 bit 它们都有一个编号 这个编号就是内存地址 提示 1 程序中的执行代码和变量在执行前都在内存里保存 2 数据所占有的存储单元个数是由其类型决定的 3 首地址 第1个单元 0号 的地址 如定义 charc A intk 01000001 k 编译或函数调用时为其分配内存单元 地址 注意 c和k的地址可能相邻 也可能不相邻 是由系统分配的 编程人员不用关心 变量是对程序中数据存储空间的抽象 二 变量与地址的关系 三 指针与指针变量 指针 在C语言中将变量的地址形象化地称为指针 指针变量 专门存放变量地址的变量 2000 指针 指针变量 变量i的内容 变量i的地址 指针变量i pointer指向整型变量i 指针变量i pointer 变量i 变量值 指向 地址存入指针变量 变量i地址 四 指针与指针变量的关系 本章主要内容 前瞻 变量应用三阶段 定义 初始化 引用 定义int aPointer 初始化int aPointer aPointer NULL 空指针 其实是0或者合并 int aPointer NULL 引用inta 3 b 6 tmp int pa NULL pb NULL pa 指针就是 标着门牌号的钥匙 用 记录了地址用 当钥匙 使用指针时 有两个作用 定义时 标志一下 这是个指针引用时 从该地址取出值 一 指针变量的定义 一般形式 类型说明 指针变量名 指针变量指向的变量的数据类型 指针说明符 表示定义指针变量 例如 int p1 p2 floatx q char c 注意 指针变量定义后 其内容不确定 应用前必须先赋值 如 inta p p 如 inta p1 p2 p1 如 int p p NULL 表示空指针 即不指向任何单元 在头文件stdio h中定义 defineNULL0 二 指针变量的赋值 用变量的地址给指针变量赋值 使用求地址运算符 变量必须已定义且类型应一致 用已初始化过的指针变量作初值 三 指针变量的初始化 格式 类型说明 指针变量名 初始地址 例inta p 示例1 本例输出结果 includeintmain inta b p 1 示例2 分析语句 若有 inta 5 p 则 1 a p apa 3 p 3 2 与 互为逆运算 p p a a 3 p a 示例3 指针变量可以进行的操作 1 赋值 inta p1 5 比较 通常与指针常量NULL进行比较 两指针变量值的大小比较往往是无意义的 示例4 关于指针的增减运算 假设 a1 0 x28ff18 includeintmain inta1 3 int p1 p1 28ff1828ff1c 变量的存取方式 直接访问 通过变量本身对变量进行存取的方式 间接访问 通过指针变量实现对变量的访问方式 间接访问的过程是 由指针变量得到变量的地址 根据该地址找到变量的存储区 再对该存储区的内容进行存取 从而实现了对变量的间接访问 inta p 间接访问 结果a的值为20 示例5 找出具有等价关系的式子 inta 5 p p a p aa p p a 示例6 读程序写结果 includeintmain inta 2 p 2223 例1 使两个指针变量交换指向 includeintmain inta1 11 a2 22 int p1 p2 p p1 p1 a1 11 22 a1 p2 a2 a2 p1 p2 a1 a2 例2 通过指针变量交换其所指向的变量的值 includeintmain inta1 11 a2 22 t int p1 p2 p1 p1 a1 11 22 a1 p2 a2 a2 22 11 t 11 p2 p1 例3 用指针实现求1 100的累加和 includeintmain inti sum 0 int p1 inti sum 0 for i 1 i 100 i sum sum i printf 1 2 100 d n sum 例4 用指针实现求10个数的和 includeintmain inti x sum int p1 例5 用指针实现求10个整数的累加和及平均值 用函数返回这两个值 include defineN10intfun intx intm double avg intmain inta 1 2 3 4 5 6 7 8 9 10 sum doubleaverage sum fun a N intfun intx intm double avg inti sum 0 for i 0 i m i sum sum x i avg double sum m returnsum 本章主要内容 一维数组与指针 一 一维数组的地址数组名是表示数组首地址 即第一个数组元素的地址 a即为 a 0 数组元素a i 的地址是 a i a 0 a 1 数组元素a i 的地址可表示为a i 即 a i就是 a i 数组元素a i 可用 a i 表示 includeintmain inti a 5 5 3 1 2 4 for i 0 i 5 i printf d n a i 二 指向数组元素的指针变量 如定义 inta 10 p a 则 p 若令 p a i 则 p就是a i 可见 当p a时 有 a 0 a p a i a i p i p i a i a i p i p i 指向数组的指针变量可以带下标 二 指向数组元素的指针变量 includeintmain inti a 5 5 3 1 2 4 p for i 0 i 5 i printf d a i printf n 地址法 for p a p a 5 p printf d p printf n 指针法 注意 p是指针变量 取值可变 可指向各个数组元素a是数组名 是地址 指针 常量 其值不可变 如定义 inta 10 p a 则 p 若令 p a i 则 p就是a i 可见 当p a时 有 a 0 a p a i a i p ia i a i p i a 三 指向数组元素的指针的算术运算 如定义 inta 10 p a q a 四 数组元素的引用方法 1 下标法 如a i 形式 2 指针法 如 a i 或 p i 如定义 inta 5 p a 通过改变p的值 也可使p指向任意数组元素 例 四种输出方法 includeintmain inta 5 1 2 3 4 5 p a i for i 0 i 5 i printf d t a i printf n for i 0 i 5 i printf d t a i printf n for i 0 i 5 i printf d t p i printf n p a for i 0 i 5 i p printf d t p return0 更常用方法 常用 直观 例 inta 1 2 3 4 5 6 7 8 9 10 p a i 5 选择 数组元素地址的正确表示 A a i B a C p D p I例 指出程序输出结果 略 intmain inta 5 8 7 6 2 7 3 inty p 6 y 5 56 例 指出程序中的错误 设a 5 8 7 6 2 7 3 intmain inti p a 7 p a for i 0 i 7 i scanf d p printf n for i 0 i 7 i printf 2d p printf n p a 例1 用指针实现将数组倒置 用下标变量实现 include defineN5intmain inta N 5 4 3 2 1 inti 0 j N 1 t while i j t a i a i a j a j t i j for i 0 i N i printf 5d n a i 用指针实现 include defineN5intmain inta N 5 4 3 2 1 int p a q a N 1 inti t while p q t p p q q t p q for p a i 0 i N i printf 5d n p 本章主要内容 例1 设10个整数的数组 求最大数的位置 include defineN10intmain inti a N p pMax printf 输入 d个整数 N for p a p pMax pMax p i pMax a 1 printf 第 d个数最大 为 d n i pMax return0 例2 输入10个数 用选择法由小到大排序并输出 include defineN10intmain inti j t a N printf 顺序输入 d个整数 N for i 0 ia j t a i a i a j a j t printf n排序后的序列为 n for i 0 i N i printf d a i printf n return0 下标法交换法 例2 输入10个数 用选择法由小到大排序并输出 include defineN10in

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论