




已阅读5页,还剩39页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机程序设计 第6章指针教师 杨振平E mail zpyang 6 1地址与指针6 2指针运算6 3指针与数组6 4动态存储分配 主要内容 100 地址的概念 内存由存储单元组成 存储单元的编号称为存储单元的地址 变量 数组等 在内存中都有其确定的地址 内存空间 地址 2000200120022003200420052006 a 6 1地址与指针 C 规定 变量的地址 变量名数组的地址 数组名函数的地址 函数名 例如 inta 100 a的值为100a的地址 a 2000 指针是C 的一种数据类型 指针变量可以存放内存单元的 地址 使用指针也能存取内存中的数据 6 1地址与指针 续 由于C 提供指针类型 因此程序中对多维数组的访问比其他高级语言的执行效率会更高效 使用指针类型能够解决 动态 使用内存空间的问题 如 解决一些变长的数据结构问题 使用指针的好处 变量指针与指针变量的定义定义格式 类型 变量名 例 inta ptr ptr 说明 a是一个int型变量 ptr是一个指向int型的指针变量 ptr中存放a变量的地址 即ptr指向a ptr a 二 通过指针访问所指变量 对象 如 inta 100 ptr ptr a 100 或 ptr 结果 100100 结果 200200 200 例如 intx 5 y ptr 中指针变量ptr前面的 是指针运算符 而 ptr表示ptr指向的变量 三 指针的初始化 指针初始化的一般格式 举例 inti 10 ptr 指向数组 6 2指针运算 与指针有关的两个运算符jp a ip jp ip和jp都指向a 指针的关系运算指针可以比较大小 即按地址值比较 指针的算术运算指针 整数 指针指针1 指针2 整数 指针的赋值运算 阅读程序 分析结果 inta b p 键盘输入 510 结果 键盘输入 510 a b p q 5 10 变量的初始值 a b p q 5 10 w p w p q q w P与q交换过程 inta b p cin p q 例6 1编写交换两个变量值的函数 函数参数为指针类型 voidswap int xp int yp intmain swap 形参为指针变量 实参为变量的地址 运行结果 6 3指针与数组 数组占据内存中一块连续的存储空间 每个数组元素都有确定的内存地址 通过指向数组的指针变量 可以快速访问数组中不同的元素 如 inta 10 p a 0 第1个元素的地址 a i 第i 1个元素的地址数组名代表数组的首地址 即 第一个数组元素的地址 它是一个常量指针 理解指针的算术运算指针 整数inta 3 10 20 30 p p a p指向a 0 cout p endl p p指向a 1 cout p endl p p指向a 2 cout p endl 1000 a 1 a 2 10 20 30 a 0 1004 1008 P P P 10 20 30 指针p 整数i 指p所指元素之后的第i个元素指针p 整数i 指p所指元素之前的第i个元素 注意 地址值加1与算术值加1有区别p p 1 相当于p p 1 4 数组元素的其他表示形式设inti b 5 Ptr b b i 的地址可以用首地址 i表示即b i b i 可以表示为 b i 又Ptr指向数组首地址 即Ptr的值等于b 则 b i 与 Ptr i 等价 从而 b i b i Ptr i Ptr i 等价 指针与数组 续 voidint array int ptr intlen int qtr ptr len while ptr qtr ptr rand ptr 例 产生一组随机整数的函数 voidprint int ptr intlen for inti 0 i len i cout ptr t ptr cout endl 输出一维数组元素的函数 intmain inta 10 cout 函数调用前a的值 endl print a 10 int array a 10 cout 函数调用后a的值 endl print a 10 return0 测试主函数 数组无初值 调用输出函数 调用输出函数 产生随机数 测试结果 6 4动态存储分配 使用静态数组存在的问题 定义n个元素的一维数组array intn cin n intarray n 错误 使用指针和new运算符 用于动态申请所需的内存空间动态申请单个变量 new 例 double p p newdouble p 100 0或p newdouble 100 0 动态申请数组 new 例 char str str newchar 81 动态分配与动态释放存储空间 常量 变量 表达式 例如 动态创建n个元素的一维整型数组 intn p cout n 键盘输入np newint n 动态建立n个元素的一维数组if p NULL cout p i 注意 如果申请失败 则返回的指针值为NULL即0值 delete运算符 释放先前动态申请到的存储空间动态释放单个变量 delete 释放动态变量动态释放数组delete 释放动态数组 6 5指针数组 定义格式 类型 数组名 元素个数 例如 定义5个int型的指针数组int ptr 5 例如 利用字符型指针数组处理多个字符串 找最大字符串 char str Basic Fortran C Java char max str 0 for inti 1 i0 max str i cout max endl charstr 81 Basic Fortran C Java charmax 81 strcpy max str 0 for inti 1 i0 strcpy max str i cout max endl 利用二维字符数组处理多个字符串 找最大字符串 stringstr Basic Fortran C Java string数组stringmax str 0 for inti 1 imax max str i cout max endl 利用string类型处理多个字符串 找最大字符串 例6 5编写一个字符串比较函数 仅比较两个字符串的前面n n 1 个字符 且在比较时不区分大小写字母 函数原形 intmystrnicmp char str1 char str2 intn 函数功能 ifstr1 str2 则return正数ifstr1 str2 则return负数 ifstr1 str2 则return0 intmystrnicmp char str1 char str2 intn while str1 0 toupper 转大写字母 例 假设 chars1 CHIANXIAN s2 chinaxining intn 调用格式 k mystrnicmp s1 s2 n if k 0 couts2 endl elseif k 0 cout s1 s2 endl elsecout s1 s2 endl 例 编写函数 将一个整数字符串转为整型数值 intatoi char string intn 0 intk 1 符号位if str str if str k 1 str while str 0 输入 123或输入 123或输入 123 输入数字字符串 intmain charstr 20 cout str cout 转换后的整数为 atoi str endl return0 运行结果 例6 3 字符串复制 函数原型 voidmystrcpy char destin char source 函数功能 将source指向的字符串 复制到destin为首地址的空间中 调用格式 mystrcpy str1 str2 其中 str1为字符数组str2为字符串 source destin B i g 0 B 字符串复制算法 一次复制一个字符 直到source遇到 0 结束 循环控制结构 while source 0 destin source source destin destin 0 voidmystrcpy char destin char source while source 0 destin source source destin destin 0 完整的函数结构 运行结果 注意结果中的乱码 如果没有结束标志符 测试一 6 3 warningC4700 localvariable str1 usedwithouthavingbeeninitialized 注意警告 测试二 6 3 6 3 测试用主函数 运行结果 6 3 例6 6排序 使用简单选择排序
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年国际环保项目经理资格考试试题及答案解析
- 普通话教学课件效果
- 2025年公务员面试国际发展合作问题与答案
- 2025年安全员应急响应试题
- 2025年安全生产安全应急处理题库及答案
- 同坡屋面画法教学课件
- 2025年工程管理试题及答案解析
- 2025年应急救援员面试精讲题库
- 2025年瑜伽教练进阶实战模拟题与答案详解
- 2025年电子商务运营管理师考试试题及答案解析
- 定向增发业务培训
- 2025年初级美容师理论知识复习资料试题及答案
- 餐饮店长转正汇报
- 2025年贵州省中考语文试卷(含答案与解析)
- 2025年广东省中考语文试卷(含答案解析)
- 2025年昆山校医考试题库
- 8-教育系统-安全生产治本攻坚三年行动工作方案及台账模板(2024-2026年)
- 2025年云南高考历史试卷解读及备考策略指导课件
- 2025至2030中国纤维素纳米纤维(CNF)行业项目调研及市场前景预测评估报告
- (高清版)T∕CES 243-2023 《构网型储能系统并网技术规范》
- 山东淄博小升初数学真题试卷
评论
0/150
提交评论