已阅读5页,还剩24页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第8章指针 8 1变量的地址和指针 2 数据在内存中的存储方式 按数据类型在内存为其分配一定数量的存储单元 字节 1 内存单元的地址 计算机的内存是以字节为单位的一片连续的存储空间 每一个字节都有一个编号 这个编号就称为内存地址 3 内存单元的内容 即变量的值 例如有定义 shortinta b charc floatx 变量a b c x的内存分配情况 每个变量的地址是指该变量所占存储单元的第一个字节的地址 称为指针 4 计算机中数据存取方式A 变量的 直接访问 方式 按变量的地址存取变量值的方式 见下图 编译器自动完成 间接访问方式示意图 将变量的地址放在另一个特殊的变量中 先到另一个变量所表示的存储单元中取得变量的地址 再由变量的地址找到变量并进行数据存取 见下图 b 变量的 间接访问 方式 变量pointer为指针变量 存放的是变量i的内存地址 我们说pointer指向i 6 指针的概念 一个变量的首地址称为该变量的指针 用来专门存储变量指针的变量称为指针变量 8 2指针与变量 一 指针变量的定义 1 定义方式 类型标识符 指针变量名1 指针变量名2 例 float p1 定义了p1为指向实型变量的指针变量 char p2 定义了p2为指向字符型变量的指针变量 标识符前面的 表示该变量为指针变量 但指针变量名是 后面的名字 不包括 3 说明 2 指针变量的三要素 指针变量的基类型 和其所指变量的类型一致 指针变量的值 另一个变量在内存的地址 指针变量的名字 符合用户标识符规则 指针变量名 某一地址 8 3 指针变量的赋值 方式1 指针变量名 方式2 指针变量名 另一已经赋值的指针变量 方式3 通过标准的库函数 malloc和calloc在内存中开辟动态存储单元 例如 inti p q p 方式2 示意图 说明 给指针变量赋 空 值除了给指针变量赋地址值外 还可以给指针变量赋NULL值 如 p Null Null是在stdio h头文件中定义的预定义符 在使用前必须使用预定义行 include Null的代码值为0 当执行以上赋值语句后 称p为空指针 等价于 p 0 或p 0注意 这时指针p不是指向地址为0的存储单元 而是一个具有一个确定的值 空 企图通过一个空指针去访问一个存储单元 将会得到一个出错信息 国家等级考试练习 1 已知inta 3 a的地址为1001 则 a 1001 2 设有定义 floatx 则以下对指针变量p进行定义且赋初值的语句中正确的是 a float p 1024 b int p float x c floatp xd float p x D 4 有以下程序段 includemain intn p NULL p A 8 4 对指针变量的操作 1 通过指针来引用一个存储单元C语言提供了一个称作 间接访问运算符 间接运算符 的单目运算符 当指针变量有确切的地址值时 就可以通过间接访问运算符引用该地址指向的存储单元 如 int p i 10 j p 说明 把p所指向的存储单元 i 的值赋给j p代表p所指向的变量i 以上语句等价于 j i 分析以下表达式的含义 j int p i 10 j p 例子 例8 1 2 算术运算 移动指针 例如 int p i char q c p 运算示例 p q 对指针进行加减运算时 数字 1 不代表十进制整数 1 即不是移动一个字节 而是移动一个存储单元长度 例如 右图1p q为假 例如 右图2inta 10 int p q p 求pq为真为假 2 比较运算 例 main inta b int pointer 1 pointer 2 a 100 b 10 pointer 1 程序运行结果 100 10100 10 思考 1 若已执行了 pointer 1 a 则 pointer 1 的含意是什么 答 相当于 a 2 a的含意是什么 答 a 3 pointer 1 相当于什么 答 a 例 对输入的两个整数按大小顺序输出main int p1 p2 p a b a 5 b 9 p1 if a b p p1 p1 p2 p2 p printf a d b d n a b printf max d min d n p1 p2 指向指针变量的指针 定义形式 类型 变量名 例如 inti p q i 30 p 指针的指针 国家等级考试练习 1 设有定义 intn1 0 n2 p b p qc p n1d p q A 2 若有说明语句 double p a 则能通过scanf语句正确给输入项读入数据的程序段是 a p D 3 已定义以下函数intfun int p return p fun函数的返回值是 a 不确定的值b 一个整数c 形参p中存放的值d 形参p的地址值 B 8 5函数之间的地址值传递 1 形参为指针变量时实参和形参之间的数据传递若函数的形参为指针类型 调用该函数时 对应的实参必须是基类型相同的地址值或者是已指向某个存储单元的指针变量 例 编写函数myadd int a int b 函数中把指针a和b所指向的存储单元中两个值相加 然后将和的值作为函数值返回 includeintmyadd int a int b intsum sum a b returnsum main intx y z printf enterx y scanf d d 思考 如果在被调函数中改变形参的值将如何呢 2 通过传送地址值在被调用函数中直接改变调用函数中变量的值 include stdio h Voidswap int int Voidmain intx 30 y 20 printf 1 x dy d n x y Swap 输出结果 x 30y 20a 30b 20a 20b 30 4 x 20y 30 例 8 4 voidswap int x1 int x2 voidorder int a int b 3 指针函数 函数返回地址值 1 一个函数可以带回整型值 实型值 字符型值 也可以带回指针类型的数据 即地址 返回值是指针类型的函数 称为指针函数 2 一般定义形式为 类型标识符 函数名 参数表 例如 int a intx floaty 3 说明 对于定义 int a intx floaty a是函数名 调用它后能得到一个指向整型数据的指针 地址 x y是函数a的形参 这个函数前面有一个 表示此函数是指针类型函数 函数值是指针 main inta b p int max scanf d d 指针函数应用
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 教师采访报告范文(2篇)
- 2025-2026学年领带折纸教案大班
- 2025-2026学年高速熔炉设计教学
- 高中英语 Unit3 Computers The 4th period Listening and Speaking教案 新人教版必修2
- 2025-2026学年名句名篇教学设计
- 2026年药物合成模拟试题及答案详解
- 2026年度山东全员安全生产大学习、大培训、大考试习题库(含答案)
- 2026年消毒卫生考核模拟试题及答案详解
- 2026年中国网络游戏市场研究与前景趋势报告(定制版)
- 2026年医院挂号模拟试题及答案详解
- 太平保险在线测评题
- 水库改造工程社会稳定风险评估报告
- 展会策划高手如何利用AI设计展台与互动体验环节技巧
- 2025年北银金科技术笔试及答案
- 神华集团公司招聘笔试题库2026
- T-CISA 338-2023 轧钢加热炉用高温耐热合金垫块
- 中国电信校招笔试题及答案
- 道路运输安全保证计划
- 计算机与人工智能导论 课件 第3章-计算机硬件基础
- 有声读物市场细分2025年有声读物行业风险预警研究报告
- 武汉市社区工作者管理办法原文
评论
0/150
提交评论