已阅读5页,还剩26页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第15讲指针定义和引用 一 指针和地址的概念1 内存与地址2 指针和指针变量3 对内存单元的访问方式二 指针的运算1 指针变量的定义2 指针运算符3 指针变量的初始化4 指针的运算三 指针变量作为函数参数 1 内存与地址 存储单元 存放一个字节数据的存储器 存储单元的内容 存储单元内的数据 内存地址 存储单元的编号 一 指针和地址的概念 x 10 y a z 9 8 2 指针和指针变量 指针 就是变量的内存地址 是一个常量 指针变量 就是存放变量内存地址的变量 变量的指针 变量的地址 当把某个变量x的地址存入指针变量p后 我们就说这个指针变量p的指针指向该变量x 3 对内存单元的访问方式 直接访问方式 通过变量名访问 间接访问方式 通过变量的指针访问 1 指针变量的定义 格式 类型说明符 指针变量名1 例 int p1 p2 说明 1 指针变量的名是p1和p2若写成 int p1 p2 则p2被定义为整型变量而非整型指针变量 二 指针的运算 格式 类型说明符 指针变量名1 例 int p1 p2 说明 2 指针变量的类型是定义时所规定的指向变量的类型 如p1 p2只能指向整型变量 不能指向实型和字符型变量 格式 类型说明符 指针变量名1 例 int p1 p2 说明 3 指针变量的值表示的是它所指向变量的地址 若一个指针变量为0 NULL 表示该指针为空 说明它没有指向任何变量 存储单元 2 指针运算符 取地址运算符 指针运算符 取地址运算符 作用 取变量的地址 例 inti p1 p1 运算符返回操作对象的内存地址 指针变量通过 的赋值语句 指向该操作对象 例 p1 将chr的地址赋给指针变量p2 p1 p2 chr i 赋值之后指针P2指向了字符型变量chr 赋值之后指针P1指向了整型变量i 指针运算符 作用 取指针所指向的地址空间的内容 即取指针所指向的变量的值 例 inti 100 p1 p1 运算符间接地存取指针变量所指向的变量的值 例 p1 i p1 p1 10 i 例指针运算符的使用 main inta 50 p 声明整型指针变量p p 程序运行结果 p 50 p ffea 100 a ffe 例指针运算符的使用 main int p1 p2 x1 x2 scanf d d 输入 12输出 p1 1 p2 2 p1 1 p2 1 例 和 的混合运用 和 两个运算符的优先级相同 当混合使用时 按自右而左的顺序进行运算 定义 inta b int p1 p2 有 p1 p2 a b 3 指针变量的初始化 格式类型说明符 指针变量名1 初始地址值 注意 指针变量在使用前必须要有确定的值 即指向一个变量 例 inti ptr1 4 指针的运算 实质 地址的运算 类型 指针赋值运算 赋地址运算 指针算术运算 指针加 减 一个整数运算 两个指针相减运算 指针关系运算 两个指针比较运算 指针赋值运算 赋地址运算 例交换两个指针所指向变量的值 main int p1 p2 x1 10 x2 20 t p1 程序运行结果 p1 10 p2 20 p1 20 p2 10 x1 20 x2 10 例两个指针变量交换指向 main int p1 p2 s intx1 10 x2 20 p1 程序运行结果 p1 10 p2 20 p1 20 p2 10 算术运算 移动指针 移动指针 对指针变量进行加上或减去一个整数 或通过赋值运算 使指针变量指向相邻的存储单元 指针移动是以它指向的数据类型所占的字节数为移动单位 只有当指针指向一串连续的存储单元时 指针的移动才有意义 才可以将一个指针变量与一个整数n做加减运算 例 main inta 10 0 1 2 3 4 5 6 7 8 9 intn 6 p1 p2 p1 p2 a printf 1 p1 d p2 d n p1 p2 p1 p1 n p2 printf 2 p1 d p2 d n p1 p2 程序运行结果 1 p1 0 p2 02 p1 6 p2 1 p1 p1 p1 4 n p1 p2 printf 3 p1 d p2 d n d n p1 p2 n 程序运行结果 3 p1 1 p2 1 n 0 两个指针的比较运算 两个指针的比较运算经常用于数组 以判断两个指针所指数组元素位置的先后 例 若pipj 则pi所指的地址在pj所指的地址之后 若pi pj 则pi所指的地址与pj所指的地址相同 若pi pj 则pi所指的地址与pj所指的地址不同 三 指针变量作为函数参数 在C语言中 函数参数可以是指针类型 当指针变量作函数参数 其作用是将一个变量的地址传送到另一个函数中 过程为 形参从实参获得了变量的地址 即形参和实参指向同一个变量 当形参指向的变量发生变化时 实参指向的变量也随之变化 指针作为函数参数举例 swap int x int y inttemp temp y y x x temp 改变形参所指向变量的值 main inta 10 b 20 printf 1 a d b d n a b swap 程序运行结果 1 a 10 b 202 a 20 b 10 说明如下 1 主函数 定义变量a b 并初始化 2 主函数 调用swap 将实参的值 地址 传递给形参 使得形参x y分别指向实参a b 3 swap 函数 交换形参 x y的值 即a b的值 例交换两个元素的值 swap int x int y int p p x x y y p 改变形参的值 main inta 10 b 20 int p1 程序运行结果 1 a 10 b 202 a 10 b 20 说明如下 1 主函数 定义变量a b 并初始化 2 主函数 定义指针变量p1 p2 并初始化 使得p1 p2分别指向a b 3 主函数 调用swap 将实参的值 地址 传递给形参 使得形参x y分别指向变量a b 4 swap 函数 交换形参x y的值 地址 使得x y的指向发生改变 由于实参对形参是单向传递 因此 形参的变化对实参没有影响 例交换两个元素的值 swap int x int y int p p x 指针p未赋值 x y y p main inta 10 b 20 swap 例用选择法将任意10个整数按从大到小顺序排序 main int p i a 10 for i 0 i 10 i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年委托创作合同
- 高速公路栏相关行业投资方案范本
- 2024年国际货物销售合同:含海运及保险条款
- 连锁超市收银员培训方案
- 建筑工程质量第三方验收方案
- 生态探险营地建设方案
- 2024年产业转型贷款合同
- 2024年园林景观设计建造合同(假山部分)
- 广东省广州市荔湾区2023-2024学年高二下学期7月期末考试语文试题(解析版)
- 2024年企业综合信息化建设合同
- 事业单位法定代表人的权利义务和法律
- 特种设备应急预案演练记录
- 自信演讲稿四篇
- 云南沿边高校青年教师发展现状及问题分析
- 城市变化之路(PPT课件)
- 量子力学自学辅导与参考答案
- 艾滋病初筛实验室SOP文件
- 华师大九年级上数学半期试题
- 先进制造业项目专项资金申请报告范文模板
- 四年级英语书写比赛试题1
- 奋斗在巴西的何氏一家
评论
0/150
提交评论