




已阅读5页,还剩47页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第9章指针 9 1指针变量9 2数组指针变量9 3指针与函数9 4指针数组和二级指针变量 2 9 1 1变量的指针和指针变量 内存地址变量的地址inta 5 b 10 指针 变量的指针和指针变量指针就是 内存单元的地址 变量的指针就是 变量的地址 它指向一个变量对应的内存单元 保存指针 地址 数据的变量称为指针变量 注 指针是常量 指针变量是变量 一个存储单元首字节的编号称为该存储单元的 地址 也就是相应变量的地址在一个地址所标记的存储单元中存放的数据称为该存储单元的 内容 直接访问例如 b a 或scanf d 间接访问 P指向a a是p所指的对象 3 9 1 2指针变量的定义和初始化 定义指针变量的一般形式为 类型标识符 指针变量名 是指针说明符 表示所定义的是指针变量 类型标识符 表示该指针变量所指向的对象的数据类型 也称为指针变量的基类型 int ip char cp 并不包含在所定义的指针变量名中 定义指针变量后 系统为指针变量分配一个存储单元 VC 6 0中 4个字节 用于存放地址值 但此时该指针变量并未指向确定的变量 一个指针变量可以指向不同的变量 但只能指向同一数据类型的变量 指针变量也可进行初始化 如 inta int p 4 9 1 3指针变量的引用 指针变量同普通变量一样 使用之前不仅要定义 而且必须赋予具体的值 未经赋值的指针变量不能使用 否则可能会造成系统混乱 甚至死机 1 指针运算符 1 取地址运算符 取地址运算符 是单目运算符 结合性为右结合性 其功能是取变量的地址 变量名 2 取内容运算符 是单目运算符 结合性为右结合性 在 运算符之后必须紧跟指针变量名一般形式为 指针变量名如 ip表示指针变量ip所指向的变量 5 指针运算符说明 例9 1 指针运算符的示例 include stdio h main inta 3 b 6 pa inta 3 b 6 int pa a pb b 和 优先级别相同 pa与 a是等价的 a与a是等价的 inta 3 b 6 pa pb pa pb b 6 2 对指针变量的赋值操作可以通过赋值语句将一个有效的内存地址赋给已定义的指针变量inta pa pa 7 main inta b c pmax pmin printf inputthreenumbers n scanf d d d 例9 2 利用指针变量求出三个数中的最大值和最小值 8 main inta1 10 a2 20 pa1 pa2 pa pa1 a1 pa2 a2 printf d d pa1 pa2 pa pa1 pa1 pa2 pa2 pa printf d d n pa1 pa2 例9 3 使两个指针变量交换指向 9 include stdio h main inta1 10 a2 20 pa1 pa2 b pa1 例9 4 交换两个指针变量所指向的变量的值 10 9 1 4指针变量作为函数参数 函数的参数不仅可以是整型 实型 字符型等数据 还可以是指针类型数据 例9 5 交换两个指针变量所指向的变量的值 include stdio h test int p1 int p2 形参为指针变量 intp p p1 p1 p2 p2 p main inta1 10 a2 20 int pa1 pa2 pa1 11 小结 在被调函数中操作主调函数中n个局部变量的方法 在主调函数中定义n个局部变量和n个指针变量 并使n个指针变量指向n个局部变量 用指针变量作实参 将这n个变量的地址传给所调用函数的形参指针变量 在被调函数中 通过形参指针变量的间接访问 访问主调函数中这n个变量的值 被调函数执行完毕后 主调函数中就得到了已经被访问过的变量 12 9 2数组指针变量 9 2 1数组指针变量的定义和引用1 数组指针变量的定义数组指针变量定义的一般形式为 类型标识符 指针变量名例如 inta 6 pa pa a 数组名a是数组的首地址 或pa 13 2 数组指针变量的引用 1 数组指针变量与整数的加减算术运算如 pa n pa n pa pa pa pa 2 两数组指针变量的减运算 两个指针是不能相加的 3 数组指针变量的关系运算 P191 注意 整数代表存储单元的个数 两个指针指向同一个数组 14 3 数组元素的引用 pa i和a i就是a i 的地址 pa i a i 与a i 是等价的 实际上是变址运算符 即将a i 按a i计算地址 然后在此地址中存取所需数据 注意 a n 与 a n是完全不同的 指向数组的指针变量 也可将其看作是数组名 因而可按下标法使用 如pa i 与 pa i 等价 15 访问一维数组元素 可以用以下两种方法 下标法 即用a i 或pa i 的形式访问数组元素 指针法 即采用 pa i 或 a i 的形式访问数组元素 16 例9 6 利用数组指针变量实现一维数组元素的输入和输出 include stdio h main inta 6 i pa a for i 0 i 6 pa i printf a d d n i pa 17 例9 7 用数组指针变量顺序输出二维数组元素的值 18 9 2 2数组名和数组指针变量作函数参数 对于数组来说 数组名 数组指针变量以及数组元素的指针均为指针类型数据 当它们作为函数的实参时 相应的形参应为同类型的指针变量 main inta 20 func a 20 func int b intn main inta 20 pa a func pa 20 func int b intn 19 例9 8 利用选择法将数组中的n个整数由小到大排序 20 一 多维数组的指针以二维数组为例 intaa 3 4 C规定aa数组名代表二维数组的首地址aa 0 aa 1 aa 2 一维数组名代表每行的首地址aa 1 指向第一行的首地址 既指向aa 1 aa 1 即aa 1 aa 2 指向第二行的首地址 既指向aa 2 aa 2 即aa 2 9 2 3二维数组的指针 21 aa 1 aa 1 aa 1 aa 1 aa i aa i aa i aa i aa 0 aa 0 0 aa 0 aa 0 0 aa 0 1 aa 0 1 aa 0 1 aa 0 1 aa 0 j aa 0 j aa 0 j aa 0 j aa i aa i 0 aa i aa i 0 aa i 1 aa i 1 aa i 1 aa i 1 aa i j aa i j aa i j aa i j aa i j aa i j aa i j aa i aa 0 aa 1 aa 2 称为行指针 数组指针 指向若干个元素aa i j称为列指针 指向每一个数组元素 aa i j aa i j aa i j 9 2 3二维数组的指针 22 9 2 3二维数组的指针 例9 9 二维数组的指针示例 23 9 2 3二维数组的指针 2 指向二维数组的指针变量 行指针的定义形式如下 类型标识符 指针变量名 长度 其中 类型标识符 为行指针所指数组的基类型 表示其后的变量是指针类型 长度 表示二维数组分解为多个一维数组时 一维数组的长度 也就是二维数组的列数 应注意 指针变量名 两边的括号不可少 如缺少括号则表示是指针数组 本章后面介绍 意义就完全不同了 例如 int pa 4 pa是一个行数组指针变量 它可以指向一个包含4个整型元素的一维数组 对于行指针可用二维数组名或行指针赋值 使之具有确定的值 如 pa aa 24 9 2 3二维数组的指针 2 指向二维数组的指针变量 由以上分析可知 访问二维数组元素 可以用以下两种方法 下标法 即用aa i j 或pa i j 的形式访问数组元素 指针法 即采用 pa i j 或 aa i j 或 pa i j 或 aa i j 的形式访问数组元素 25 9 2 3二维数组的指针 3 行数组指针变量作函数参数二维数组的指针作函数实参时 有列指针和行指针两种形式 相应的 用来接受实参数组指针的形参 必须使用相应形式的指针变量 如下所示 1 实参用列指针 形参用 列 指针变量 2 实参形参用行指针 形参用行指针变量 例9 10 已知某班4位学生5门课的成绩 计算总平均分数 并输出某个学生各门课的成绩 26 9 2 3二维数组的指针 27 9 2 4指针与字符串 1 字符串的表示形式 1 用一维字符数组表示 例9 11 用一维字符数组表示字符串示例 28 9 2 4指针与字符串 1 字符串的表示形式 2 用字符型指针变量表示 例9 12 用字符型指针变量表示字符串示例 29 9 2 4指针与字符串 例9 13 将字符串a复制到字符串b 注意 a和b都定义为字符数组 可以用指针方法表示数组元素 30 9 2 4指针与字符串 例9 14 用字符型指针变量来处理 例9 13 31 9 2 4指针与字符串 2 字符型指针变量作函数参数将一个字符串从一个函数传递到另一个函数 只需要传递字符串的首地址 这时实参为字符串首地址 对应的形参应为字符型指针变量 也可以写成字符型数组的定义形式 32 9 2 4指针与字符串 例9 15 编写程序通过调用字符串拷贝函数来实现字符串的复制 1 形参用字符数组作参数 33 9 2 4指针与字符串 例9 17 编写程序通过调用字符串拷贝函数来实现字符串的复制 2 形参用字符指针变量 34 9 2 4指针与字符串 归纳起来 作为函数参数 有以下几种情况 1 形参和实参都用数组名 2 实参用数组名 形参用字符指针变量 3 实参形参都用字符指针变量 4 实参用字符指针变量 形参为数组名 35 9 2 4指针与字符串 3 字符指针变量与字符数组小结 1 存储内容不同 字符数组存储的是字符串本身 每个数组元素存放一个字符 而字符指针变量存放的是字符串的首地址 2 赋值方式不同 对字符数组只能对各个元素赋值 不能用以下办法对字符数组赋值 charstr 20 str Iamhappy 而对字符指针变量 可以采用下面方法赋值 char pa pa Iamhappy 或char pa Iamhappy 但注意赋给pa的不是字符 而是字符串的首地址 3 字符指针变量的值是可以改变的 而字符数组名代表字符数组的起始地址 是一个常量 不能改变 36 9 3指针与函数 9 3 1指向函数指针变量的定义和赋值 定义指向函数的指针变量的一般形式为 类型标识符 指针变量名 这里的 类型标识符 是指函数返回值的类型 例如 int pf 定义pf是一个指向函数的指针变量 其中函数的返回值是整型 注意 pf 两侧的括弧是必需的 表示pf先与 结合 是一个指针变量 然后与后随的 结合 表示指针变量指向函数 函数名代表该函数的入口地址 因此 可用函数名给指向函数的指针变量赋值 格式为 指向函数的指针变量 函数名 例如 pf fun 注意 函数名后不能带括号和参数 37 9 3指针与函数 9 3 1指向函数指针变量的定义和赋值 给函数指针赋值后 就可以引用它了 函数的调用可以通过函数名调用 也可以通过指向函数的指针变量调用 用函数名调用的一般形式为 函数名 实参表 用指向函数的指针变量调用的一般形式为 指针变量名 实参表 38 9 3指针与函数 9 3 1指向函数指针变量的定义和赋值 例9 17 使用指向函数的指针变量调用函数 39 9 3 2指向函数的指针变量作函救参数 指向函数的指针变量也可以作为函数的参数 即将函数的入口地址传递给函数 也就是将函数名传给形参 从而实现利用相同的函数调用语句调用不同函数的目的 例9 18 用函数指针变量实现四则运算 40 9 3 2指向函数的指针变量作函救参数 41 9 3 3指针函数 一个函数可以返回一个int型 float型 char型的数据 也可以返回一个指针类型的数据 返回指针值的函数称为指针函数 定义指针函数的一般形式为 类型标识符 函数名 参数表 例如 int pfun floatx floaty 请注意在函数名pfun的两侧分别为 运算符和 运算符 由于 优先级高于 因此pfun先与 结合 说明这是函数形式 这个函数前面有一个 表示此函数是指针类型 函数值是指针 而最前面的类型标识符 int 表示返回的指针指向整型数据 42 9 3 3指针函数 例9 19 某车间有4个班组 已知去年每个班组每个季度的产值 单位 万元 编程实现在输入某个班组序号后 输出该班组的每季度产值和全年总产值 要求用指针函数来实现 43 9 3 3指针函数 例9 20 编程输出上例中年产值不足20万元的班组号及年产值 1 44 9 3 3指针函数 例9 21 编程输出上例中年产值不足20万元的班组号及年产值 2 45 9 4指针数组和二级指针变量 9 4 1指针数组 指针数组的定义形式为 类型标识符 数组名 长度 其中 类型标识符 指明指针数组各元素所指向的对象的数据类型 例如 int pc 5 定义了一个长度为5的指针数组pc 它的每个数组元素都可指向一个整型变量 或存放一个整形变量的指针 注意 不要写成int pc 5 这是指向一维数组的数组指针变量 这在前面已介绍过了 46 9 4指针数组和二级指针变量 例9 22 分析下列程序的输出结果 47 9 4指针数组和二级指针变量 例9 23 将若干地名按字母顺序 由小到大 输出 48 9 4 2main函数的形参 主函数的原形如下 main intargc char argv 其中 argc和argv就是main 函数的形参 argc是整形变量 argv 是一个字符型指针数组 main 函数是由操作系统调用的 它的参数由操作系统传递 所以运行带形参的主函数时 必须在操作系统命令状态下 输入命令行 命令名参数1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026届福建省罗源县第一中学高二化学第一学期期中复习检测试题含解析
- 2026届湖北省华师一附中化学高一上期中复习检测试题含解析
- Unit2Morethanfun单词清单-外研版英语七年级上册
- Unit14SectionB(1a-3bSelfCheck)教学设计人教版(2012)九年级英语全册
- Unit4知识清单译林版九年级(2012)英语上册
- 工程建设招标合同条件(第二部分)
- 化妆品镜头知识培训
- 现场发言面试题目及答案
- 网站托管面试题目及答案
- 司法知识业务培训课件
- 五年级上册科学青岛版全册教案
- 出入境证件承诺书
- 合理膳食 均衡营养课件
- 医院科教科主任竞聘演讲稿课件
- 建筑装饰施工技术课件
- 《公路桥涵养护规范》(5120-2021)【可编辑】
- 医院科研诚信管理办法范例
- 乳腺钼靶诊断分级标准
- (完整版)数字信号处理教案(东南大学)
- 班组长能力提升角色认知课件
- 人民代表大会的职权
评论
0/150
提交评论