




已阅读5页,还剩36页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
0 第6章指针 西安交通大学计算机教学实验中心 计算机程序设计C 1 第6章指针 教学内容6 1地址与指针6 2指针运算6 3指针与数组6 4动态存储分配自学内容6 5指针数组6 6指向指针的指针6 7指针的初始化 2 本章目标 掌握指针的概念和定义方法 掌握指针的操作符和指针的运算掌握指针与数组的关系 掌握指针与字符串的关系 掌握new和delete操作符作用和使用方法 学会使用VisualC 帮助系统 3 6 1地址与指针 一 地址地址是存放信息数据的内存单元的编号 是一个无符号的整数intA 10 1 2 3 4 5 6 7 8 9 10 charstr1 8 abcdefg 程序中定义的任何变量 数组或函数等 在编译时都会在内存中分配一个确定的地址单元 计算机执行命令 存取数据 都是通过地址找到相应的命令或数据的 地址的获取数组名 就是数组的地址函数名 就是函数的地址 4 取地址运算举例 includeintmax inta intb returna b a b voidmain intx 20 y 30 doublefib 1000 0 1 cout 输出变量x的地址 5 二 指针 内存地址是一个无符号的整数 这个整数可以存储在内存的单元中 存放指针 地址 的内存单元用变量表示 这个变量叫指针变量 简称指针 某个变量的内存地址称为该变量的指针指针也是一种数据类型说明一个变量是指针 inta int p B001 5 B001 a p A001 6 数据 地址和指针的关系 cout ipr endl cout ipr endl 7 指针变量的声明 1 指针声明的一般格式 数据类型 指针变量名 举例 int ptr float array char s1 s2 2 指针类型的说明不同类型的指针本身所占据的存储区域都一样大 规定了用指针间接访问数据时的访问方式为指针的算术运算提供依据 8 3 指针变量的初始化 指针在定义后必须初始化才能使用 否则 结果不确定 指针初始化的一般格式 指针变量名 数据对象 数据对象可以是变量的地址 数组名 字符串名 字符串常数 函数名 结构体变量名等 举例 int ptr i 10 ptr 9 6 2指针的运算 指针运算是以指针变量所持有的地址值为运算量进行的运算 指针运算的实质是地址的运算 指针的运算与普通变量的运算在种类和意义上都是不同的 其种类有限只能进行 1 和 10 1 和 运算符 11 指针操作举例 int w inta int p p 作用 int w inta int p w p a 12 例6 1编写交换两个变量值的函数 Example6 1 交换两个整型变量的值voidswap int xp int yp inttmp tmp xp xp yp yp tmp 如何调用 13 二 指针变量的其他运算 1 指针赋值将一个指针赋值给另一个指针 结果是两个指针指向一个相同的地址单元 例如 jp 14 4 指针变量的下标运算doublex a 100 b 100 double p a for inti 0 i n i p i i p i i for inti 0 i n i cout p i cout p i b i p i 15 6 3指针与数组 数组名是常量指针 inta 10 a等于a 0 fp 0 a 1 fp 1 a 1 fp 1 16 指针指向字符数组示例 char ptr qtr charsa 6 Big intlen strlen sa ptr sa qtr ptr len ptr cout ptr ptr 2 cout ptr 17 指针 数组名作为函数参数 数组名是指针常量 可以作为函数的参数 在函数调用时 作为实参 传递数组的首地址被调函数中对形参数组的处理实际就是对调用函数的实参数组的处理 在被调函数中作为形式参数的一组数组不需要说明长度 即使说明了大小也不起作用 因为C只传递数组首地址 而对数组边界不加检查 这带来的好处是 函数对长度不等的同类数组都通用 如要指定长度可以设定另一个参数来传递数组元素的个数 18 例6 2编写一个字符串复制函数 voidmystrcpy char p1 char p2 算法分析 p1 p2指向两个字符串的首地址 将当前地址p2所指内容送到p1所指单元 p1 p2 重复 直到整个字符串复制完毕为止 19 例6 2编写一个字符串复制函数 Example6 2 复制字符串voidmystrcpy char destin char source while source 0 如果源字符串没结束 继续 destin source 复制字符source 移向源字符串中的下一个字符destin 移向新字符串的下一位置 destin 0 在新字符串尾部写结束符0 20 例6 3数组清零 voidclear array float ptr intlen ptr指向数组的首地址 len是准备清零的元素个数float qtr ptr len qtr指向被清零的最后一个数组元素的下一位置while ptr qtr ptr 0 0 将指针所对应的数组元素置0ptr 指针向后移动一个单位 21 6 4动态存储分配 程序中使用的变量 数组和函数必须先声明后使用 编译系统根据声明语句开辟内存空间 因此数据占用的存储空间是固定的 这种内存储器分配方法被称为静态存储分配动态存储分配 dynamicallocation 是在程序运行过程中随机获得内存存储空间的方法C 用运算符new和delete实现动态存储分配 22 运算符new和delete实现动态存储分配 1 运算符new 1 申请一个存储单元 new int p q p newint 5 q newint q 4 2 申请一组连续存储单元 数组 new 23 2 delete释放存储单元 1 释放先前申请到的单个存储单元delete 2 释放数组的空间delete p 24 例6 4利用动态数组求斐波那挈数列的前n项 includeusingnamespacestd intmain intn cout n int p newint n 1 25 如果没有申请到内存或数据输入有误 则返回if p 0 n 0 cout Error endl return 1 p 0 0 p 1 1 cout p 0 endl cout p 1 endl for inti 2 i n i p i p i 2 p i 1 cout p i endl delete p 释放数组空间return0 26 6 5指针数组 指针数组 数组元素是指针的数组声明一维指针数组的语法形式为 其中常量表达式指出数组元素的个数 数据类型名确定每个元素指针的类型 数组名是指针数组的名称 同时也是这个数组的首地址 27 例如 char ptr 10 一维指针数组 其中包括10个数组元素 均为指向字符类型的指针指针数组的初始化例如 char func namelist strcat strchr strcmp strcpy strlwr strstr strupr 28 程序设计举例 例6 6 编写一个字符串比较函数 仅比较两个字符串的前面若干个字符 且在比较时不区分大小写字母 例6 7 将字符串反序输出 例6 8 编写一个用于对整型序列进行排序的函数 排序方法使用简单选择排序法 29 字符串的比较函数 思想 用字符数组实现intmystrcmp chars1 chars2 inti 0 while s1 i s2 i 30 用指针实现intmystrcmp char s1 char s2 inti 0 while s1 s2 区分大小写 比较前n个 31 例6 6不区分大小写字母的部分字符串比较 比较前n个 不区分大小写intmystrnicmp char str1 char str2 intn while toupper str1 toupper str2 32 例6 7反序输出 includeusingnamespacestd intmain charstr abcdef char p 33 voidrevout char str inti N 0 while str N 0 N for i N 1 i 0 i cout str i cout endl voidrevout char str char p str while p 0 p p while p str cout p p cout endl 34 选择排序方法 选择排序与冒泡排序方法较为相似循环N 1趟每趟挑选最小元素放到数组 最 左边举例如下 初始状态 272231第一趟 172232第二趟 127232第三趟 122732第四趟 122237第五趟 122237注意挑选最小元素时 先记录最小元素下标 然后将最小元素与 最 左边元素交换 35 例6 8简单选择排序 includeusingnamespacestd voidselectsort int list intcount for inti 0 i count 1 i intk i 先记录最小元素的下标for intj i 1 j count j if list j list k k j 先记录下标if k i 本趟找完最小元素 再交换 inttmp list i list i list k list k tmp 36 主函数 intmain intarray 6 2 7 2 2 3 1 selectsort array 6 cout Theresultis endl for inti 0 i 6 i cout array i cout endl return0 37 第6章实验作业 38 作业 文件命名 学号 ch6 doc文件内容 班级 学号 姓名 题目 程序 结果 问题文件夹 工程一定是自己的学号提交日期 下周三 4月21日22 00 不允许迟交1 第6章习题2 整数按3位分节格式输出 2 编写函数 取一个字符串中第i个开始的n个字符 取子串 用指针操作 函数原型为 char strgetn char str1 char str2 inti intn str1为源字符串 str2为目的串 i为起始位置 从1开始 n为字符个数 例如 若str1 portable i 5 n 4
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小学生钟表课件
- 小学生课外阅读课件
- 2024年甘肃天水中考地理真题及答案
- 征地拆迁补偿款发放及房屋产权转让合同
- 2024-2025学年安徽省江南十校高一下学期5月份联考生物试题及答案
- 电气化农业工具的市场准入与监管政策探讨考核试卷
- 印刷业区域产业布局与区域产业链协同发展研究考核试卷
- 品牌扩张风险防范考核试卷
- 农业节水灌溉滴灌带批发考核试卷
- 第三方云服务提供商安全风险评估工具选择指南考核试卷
- SEO与用户体验设计在医疗安全产品中的应用
- DB51T 2628-2019 司法所外观及室内标识规范
- 2024年度智能工厂MES系统实施合同
- 四川省雅安市2024-2025学年高二数学下学期期末检测试题理
- 财经基本技能-验钞技能
- CJT 313-2009 生活垃圾采样和分析方法
- 2024大功率风电叶片回收技术
- 《酒店消防安全培训》课件完整版
- 70岁以上的老年人驾考三力测试答案
- 国开2024年《法律基础》形考作业1-4答案
- PDCA提高卧床患者踝泵运动的执行率
评论
0/150
提交评论