已阅读5页,还剩35页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C程序设计 讲师 徐红波Email 第10章指针 指针是C语言中的一个重要概念 也是C语言的一个重要特色 正确而灵活地运用它 可以有效地表示复杂的数据结构 能动态分配内存 方便地使用字符串 有效而方便地使用数组 在调用函数时能获得1个以上的结果 能直接处理内存单元地址等 这对设计系统软件是非常必要的 掌握指针的应用 可以使程序简洁 紧凑 高效 每一个学习和使用C语言的人 都应当深入地学习和掌握指针 可以说 不掌握指针就是没有掌握C的精华 10 1地址和指针的概念 变量的属性 名 值和地址变量的访问方式 直接访问 间接访问变量的地址称为该变量的 指针 指针变量是存放地址的变量 10 2变量的指针和指向变量的指针变量 变量的指针就是变量的地址 存放变量地址的变量是指针变量 它用来指向另一个变量 为了表示指针变量和它所指向的变量之间的联系 在程序中用 符号表示 指向 如果已定义i pointer为指针变量 则 i pointer 是i pointer所指向的变量 10 2 1定义一个指针变量 C语言规定所有变量在使用前必须定义 指定其类型 并按此分配内存单元 指针变量不同于整型变量和其他类型的变量 它是用来专门存放地址的 必须将它定义为 指针类型 定义指针变量的一般形式为基类型 指针变量名 可以用赋值语句使一个指针变量得到另一个变量的地址 从而使它指向一个该变量 在定义指针变量时要注意两点 1 指针变量前面的 表示该变量的类型为指针型变量 2 在定义指针变量时必须指定基类型 10 2 2指针变量的引用 指针变量中只能存放地址 指针 不要将一个整数 或其他非地址类型的数据 赋给一个指针变量 有两个有关的运算符 1 取地址运算符 2 指针运算符 或称 间接访问 运算符 取其指向的内容 例10 1 通过指针变量访问整型变量 includevoidmain inta b int pointer 1 pointer 2 a 100 b 10 pointer 1 对 和 运算符再作说明 如果已执行了语句pointer 1 1 pointer 1 2 a 3 pointer 1 例10 2 输入a和b两个整数 按先大后小的顺序输出a和b includevoidmain int p1 p2 p a b scanf d d 10 2 3指针变量作为函数参数 函数的参数不仅可以是整型 浮点型 字符型等数据 还可以是指针类型 它的作用是将一个变量的地址传送到另一个函数中 例10 3 题目要求同例10 2 即对输入的两个整数按大小顺序输出 includevoidmain voids p1 int p2 inta b int pointer 1 pointer 2 scanf d d voids p1 int p2 inttemp temp p1 p1 p2 p2 temp 例10 4 输入a b c这3个整数 按大小顺序输出 voidmain inta b c p1 p2 p3 scanf d d d voidexchange int q1 int q2 int q3 if q1 q2 s if q1 q3 s if q2 q3 s voids pt1 int pt2 inttemp temp pt1 pt1 pt2 pt2 temp 10 3数组与指针 一个变量有地址 一个数组包含若干元素 每个数组元素都在内存中占用存储单元 它们都有相应的地址 指针变量既然可以指向变量 当然也可以指向数组元素 把某一元素的地址放到一个指针变量中 所谓数组元素的指针就是数组元素的地址 引用数组元素可以用下标法 如a 3 也可以用指针法 即通过指向数组元素的指针找到所需的元素 使用指针法能使目标程序质量高 占内存少 运行速度快 10 3 1指向数组元素的指针 定义一个指向数组元素的指针变量的方法 与以前介绍的指向变量的指针变量相同 例如 inta 10 int p p 10 3 2通过指针引用数组元素 假设p已定义为一个指向整型数据的指针变量 并已给它赋了一个整型数组元素的地址 使它指向某一个数组元素 如果有以下赋值语句 p 1 表示将1赋给p当前所指向的数组元素 如果p的初值为 a 0 则 1 p i和a i就是a i 的地址 2 p i 或 a i 是p i或a i所指向的数组元素 即a i 3 指向数组的指针变量也可以带下标 如p i 与 p i 等价 根据以上叙述 引用一个数组元素 可以用 1 下标法 如a i 形式 2 指针法 如 a i 或 p i 其中a是数组名 p是指向数组元素的指针变量 其初值p a 例10 5 输出数组中全部元素 假设有一个a数组 整型 有10个元素 要输出各元素的值有3种方法 1 下标法 2 通过数组名计算数组元素地址 找出元素的值 3 用指针变量指向数组元素 例10 6 通过指针变量输出a数组的10个元素 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 d p printf n 10 3 3用数组名作函数参数 如果一个实参数组 要想在函数中改变此数组中的元素的值 实参与形参的对应关系有以下4种情况 1 形参和实参都用数组名 2 实参用数组名 形参用指针变量 3 实参形参都用指针变量 4 实参为指针变量 形参为数组名 例10 7 将数组a中n个整数按相反顺序存放 例10 8 用实参指针改写例10 7 例10 9 用选择法对10个整数按由大到小顺序排序 10 3 4多维数组与指针 用指针变量可以指向一维数组中的元素 也可以指向多维数组中的元素 但在概念上和使用上 多维数组的指针比一维数组的指针要复杂一些 1 多维数组元素的地址 inta 3 4 1 3 5 7 9 11 13 15 17 19 21 23 a是一个数组名 A数组包含三行 即3个元素 a 0 a 1 a 2 而每一个元素又是一个一维数组 它包含4个元素 即4个列元素 例如 a 0 所代表的一维数组又包含4个元素 a 0 0 a 0 1 a 0 2 a 0 3 可以认为二维数组是 数组的数组 即二维数组a是由3个一维数组所组成的 例10 10 输出二维数组有关的值 2 指向多维数组元素的指针变量 1 指向数组元素的指针变量 例10 11 用指针变量输出二维数组元素的值 2 指向由m个元素组成的一维数组的指针变量 例10 12 输出二维数组任一行任一列的值 3 用指向数组的指针作函数参数 一维数组名可以作为函数参数传递 多维数组名也可作函数参数传递 在用指针变量作形参以接受实参数组名传递来的地址时 有两种方法 1 用指向变量的指针变量2 用指向一维数组的指针变量 例10 13 有一个班 3个学生 各学4门课 计算总平均分数以及第n个学生的成绩 例10 14 在上题基础上 查找有一门以上课程不及格的学生 输出他们的全部课程的成绩 10 4字符串与指针10 4 1字符串的表示形式 在C程序中 可以用两种方法访问一个字符串 1 用字符数组存放一个字符串 然后输出该字符串 例10 15 定义一个字符数组 对它初始化 然后输出该字符串 2 用字符指针指向一个字符串 例10 16 定义字符指针 例10 17 将字符串a赋值为字符串b 例10 18 用指针变量来处理例10 17问题 10 4 2字符指针作函数参数 将一个字符串从一个函数传递到另一个函数 可以用地址传递的方法 即用字符数组名作参数 也可以用指向字符的指针变量作参数 在被调用的函数中可以改变字符串的内容 在主调函数中可以得到改变了的字符串 例10 19 用函数调用实现字符串的复制 1 用字符数组作参数 2 形参用字符指针变量 10 4 3对使用字符指针变量和字符数组的讨论 虽然用字符数组和字符指针变量都能实现字符串的存储和运算 但它们两者之间是有区别的 不应混为一谈 主要有以下几点 1 字符数组由若干个元素组成 每个元素中放一个字符 而字符指针变量中存放的是地址 决不是将字符串放到字符指针变量中 2 赋值方式 3 对字符指针变量赋初值 4 如果定义了一个字符数组 在编译时为它分配内存单元 它有确定的地址 而定义一个字符指针变量时 给指针变量分配内存单元 在其中可以放一个字符变量的地址 也就是说 该指针变量可以指向一个字符型数据 但如果未对它赋予一个地址值 则它并未具体指向一个确定的字符数据 5 指针变量的值是可以改变的 例10 20 改变指针变量的值 例10 21 用带下标的字符指针变量引用字符串中的字符 6 用指针变量指向一个格式字符串 可以用它代替printf函数中的格式字符串 10 5指向函数的指针10 5 1用函数指针变量调用函数 可以用指针变量指向整型变量 字符串 数组 也可以指向一个函数 一个函数在编译时被分配给一个入口地址 这个函数的入口地址就称为函数的指针 可以用一个指针变量指向函数 然后通过该指针变量调用此函数 例10 22 求a和b中的大者 说明 1 指向函数的指针变量的一般定义形式为数据类型 指针变量名 函数参数表列 2 函数的调用可以通过函数名调用 也可以通过函数指针调用 即用指向函数的指针表量调用 3 int p int int 表示定义一个指向函数的指针变量p 它不是固定指向哪一个函数的 而是表示定义了这样一个类型的变量 它是专门用来存放函数的入口地址的 4 在给函数指针变量赋值时 只需给出函数名而不必给出参数 5 用函数指针变量调用函数时 只需将 p 代替函数名即可 在 p 之后的括号中根据需要写上实参 6 对指向函数的指针变量 像p n p 等运算是无意义的 10 5 2用指向函数的指针作函数参数 函数指针变量通常的用途之一是把指针作为参数传递到其他函数 函数的参数可以是变量 指向变量的指针变量 数组名 指向数组的指针变量等 函数的指针也可以作为参数 以实现函数地址的传递 这样就能够在被调用的函数中使用实参函数 例10 23 设一个函数process 在调用它的时候 每次实现不同的功能 输入a和b两个数 第一调用process时找出a和b中大者 第二次找出其中小者 第三次求a与b之和 10 6返回指针值的函数 一个函数可以返回一个整型值 字符值 实型值等 也可以返回指针型的数据 即地址 其概念与以前类似 只是返回的值的类型是指针类型而已 这种返回指针值的函数 一般定义形式为类型名 函数名 参数表列 例10 24 有若干个学生的成绩 每个学生有4门课程 要求在用户输入学生序号后 能输出该学生的全部成绩 用指针函数来实现 例10 25 对上例中的学生 找出其中不及格课程的学生及其学生号 10 7指针数组和指向指针的指针10 7 1指针数组的概念 一个数组 若其元素均为指针类型数据 称为指针数组 也就是说 指针数组中的每一个元素都相当于一个指针变量 一维指针数组的定义形式为类型名 数组名 数组长度 例如 int p 4 例10 26 将若干字符串按字母顺序输出 10 7 2指向指针的指针 在掌握了指针数组的概念的基础上 下面介绍指向指针数据的指针变量 简称为指向指针的指针 例10 27 使用指向指针的指针 例10 28 指针数组的元素指向整型数据 10 7 3指针数组作main函数的形参 指针数组的一个重要应用是作为main函数的形参 在以往的程序中 main函数的第一行一般写成以下形式 voidmain 括号中是空的 实际上 main函数可以有参数 例如 voidmain intargc char argv 10 8有关指针的数据类型和指针运算的小结10 8 1有关指针的数据类型的小结 10 8 2指针运算小结 1 指针变量加 减 一个整数 2 指针变量赋值 3 指针变量可以有空值 即该指针变量不指向任何变量 4 两个指针变量可以相减 5 两个指针变量比较 10 8 3void指针类型 ANSI新标准增加了一个 void 指针变量 即可定义一个指针变量 但不指定它是指向哪一种类型数据的 ANSIC标准规定用动态存储分配函数时返回void指针 它可以用来指向一个抽象的类型的数据 在将它的值赋给另一指针变量时要进行强制类型转换使之适合于被赋值的变量的类型 小结 在本章中介绍了指针的基本概念和初步应用 应该说明 指针是C语言中重要的概念 是C的一个特色 使用指针的优点 1 提高程序效率 2 在调用函数时变量改变了的值能够为主调函数使用 即可以从函数调用得到多个可改变
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年四川文化传媒职业学院单招职业倾向性考试题库附答案详解
- 2026年四川电力职业技术学院单招职业适应性测试题库及答案详解(夺冠)
- 2025年重庆市璧山区兴合供销社集团有限公司招聘人员3人笔试参考题库附带答案详解
- 2025年辽宁大连公交客运集团有限公司招聘营运驾驶员30人笔试参考题库附带答案详解
- 2025年贵州水利院校园招聘49人笔试参考题库附带答案详解
- 2025年蒙自市锦屹建筑工程有限公司招聘工作人员2名笔试参考题库附带答案详解
- 2025年第一批贵州西南能矿集团股份有限公司总部公开招聘2人笔试参考题库附带答案详解
- 2025年湖北文旅梁子湖发展有限公司招聘4人笔试参考题库附带答案详解
- 2025年浦江县粮食收储有限公司公开招聘工作人员3人笔试参考题库附带答案详解
- 2025年江西中烟高校毕业生招聘笔试人员与笔试安排笔试参考题库附带答案详解
- 2026年苏州信息职业技术学院单招职业适应性测试题库及答案解析
- 第4课 致敬劳动者 第1课时 课件+视频 2025-2026学年道德与法治三年级下册统编版
- 2026年共享工厂项目投资计划书
- 2026年工厂节后复工复产安全培训
- 厂房换板施工方案(3篇)
- 女职工法律知识讲座课件
- 2026年及未来5年中国车桥总成行业发展前景预测及投资战略研究报告
- 2026年春统编版(新教材)小学道德与法治三年级下册(全册)教学设计(附教材目录P97)
- 1.2 宪法的内容和作用 课件-2025-2026学年道德与法治八年级下册 统编版
- 工程项目风险管理检查表全面覆盖版
- 2026中国华电集团产融控股有限公司校园招聘(公共基础知识)综合能力测试题附答案
评论
0/150
提交评论