




已阅读5页,还剩61页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
程序设计基础 1 第 7章 指针 指针与指针变量 内存 、地址和内容 第 7章 指针 指针与字符串 指针与数组 指针数组 指针与函数 *带参数的函数 *指向指针的指针 动态内存分配 2 内存、地址和 内容 100 101 102 103 104 105 106 107图 7内存中的字节 100 104图 7内存中的 4个字节 3 1 1 21 0 0 1 0 4- 1 3 . 1 41 0 8 1 1 21 0 01 1 61 0 8图 7内存 ( 地址标识 ) 中 的 5个整数的内容 假设整型占 4个字节 112a 3 . 14c 内存( 名字标识 )中的 5个整数的内容 内存、地址和 内容 高级语言提供 的特性之一就是通过 名字 而不是 地址 来访问内存的位置。 4 指针与指针变量 1 3 2 指针变量的引用 指针变量的定义 指针变量作为函数参数 5 6 指针变量的定义 指针变量 定义: 类型 *指针变量名 ; 指针的基类型 :即指针所指向变量的类型 让 指针变量具体指向某个变量数据 ,需要 对其进行初始化。 a=112; c=a; c; & 112a& 3 . 14指针变量是存放地址的变量。 7 指针变量的定义 【说明】 ( 1)定义 指针 变量 的 三 种 写法。 /*此种方法最常用 */ ( 2)基类型与指针所指向的变量类型要一致 。 a=112; c=c; a; 8 指针变量 的引用 指针变量的 间接 访问 ,即 取指针变量名所指向变量的内容。 *指针变量名 a=112; c=a; c; *00; * & p t 11 0 0变 量 a& p t 26 . 2 8变 量 c& ap t 11 1 2a& cp t 23 . 1 4c【说明】 ( 1)对变量 a=100; /*方法一:直接寻址方式 */ *00; /*方法二:间接寻址方式 */ ( 2)未初始化和非法的指针 a; *a=12; /*危险 */ 野指针” ,可能会指向内存中的任意位置。 对 指针进行间接访问之前 , 应 确保 它们已经被初始化 。 ( 3) /*#0*/ 指针变量 的引用 9 10 【说明】 ( 4)运算符 *在 乘法 a=3,b; b=3*a; /*运算符 *表示乘法 */ 指针变量的定义 a=3; a; /*运算符 *表示指针变量的定义 */ 指针变量的引用 a=3; a; %d n”, * /*运算符 *表示指针变量的引用 */ 11 【说明】 ( 5) &和 *运算符的综合运用 取地址运算符 &和间接寻址运算符 *的优先级是相同的,按照自右向左的方向结合 。 a=3; a; 表达式 &* * a &a 表达式 *& &a * a 等价于 等价于 等价于 等价于 12 指针 变量作为函数参数 为什么要用指针变量作为函数参数呢 ? 13 【程序 7从键盘任意输入两个整数,编程实现将其交换后再重新输出。 #*函数功能 : 交换 两个整型数 x和 函数 参数 : 整型 变量 x和 函数 返回值: 无 */ x,y) x; x=y; y= a,b; a,b:); %d%d,&a,&b); /*打印交换前的 a和 b*/ a=%d,b=%dn,a,b); a,b); /*打印交换后的 a和 b*/ a=%d,b=%dn,a,b); ; 3a 4 bm a i e m ps w a a ) 调用 s w a p () 函数3a 4 3t e m p( b ) 执行 s w a p () 函数y3a 4 e m p( c ) 从 s w a p () 函数返回a,b:3 4 a=3,b=4 a=3,b=4 怎样才能 在真正 实现两数互换的功能呢? 14 【程序 7从键盘任意输入两个整数,利用指针变量作为函数参数,编程实现将两数交换后再重新输出 。 #*函数功能 : 交换 两个整型数的值 函数 参数 : 指针 变量 x和 函数 返回值: 无 */ x,y) x; *x=*y; *y= a,b; a,b:); %d%d,&a,&b); /*打印交换前的 a和 b*/ a=%d,b=%dn,a,b); /*调用函数 实现 a和 (&a,&b); /*打印交换后的 a和 b*/ a=%d,b=%dn,a,b); ; a,b:3 4 a=3,b=4 a=4,b=3 3& a 4 & bm a i b yt e m ps w a a ) 调用 s w a p () 函数4& a 3 & b& e m p( b ) 执行 s w a p () 函数y4 b& b e m p( c ) 从 s w a p () 函数返回a , * x b , * y a , * x b , * y b& 真正实现了两数的互换功能。 指针 与数组 1 2 有关指针的运算 指向一维数组的指针 15 3 4 指向二维数组的指针 一维数组的指针作为函数参数 5 二维数组的指针作为函数参数 16 指向一维数组的指针 a5=2,4,6,8,10; p; p=&a0; & a 0 24681 0a 0 a 1 a 2 a 3 a 4 p=a; p+1: 指向 同一数组中的下一个元素 。 已知 a0的 地址 : 0 那么 a1 的地址 : 0*4=0组 元素 ai( i=04)的 地址: 0i*4 即 a+1 即 a+i 假设整型占 4个字节 图 7指针变量指向一维数组 17 表 7一维数组元素的访问方法 下标法 1 下标法 2 指针法 1 指针法 2 a0 p0 *a *p a1 p1 *(a+1) *(p+1) a2 p2 *(a+2) *(p+2) a3 p3 *(a+3) *(p+3) a4 p4 *(a+4) *(p+4) ai (i=04) pi *(a+i) *(p+i) 下标法 指针法 246810a 0 , p 0 a 1 , p 1 a 2 , p 2 a 3 , p 3 a 4 , p 4 1 , a + 1p + 2 , a + 2p + 3 , a + 3p + 4 , a + 4a 指向一维数组的指针 18 指向一维数组的指针 【程序 7有一个整型数组 a,用不同的方法输出数组中的全部元素。 【 问题分析 】 设 整型数组 a5,可以用下面 5种不同的方法实现输出数组中的全部元素。 数组名加下标形式; 通过数组名计算数组元素地址,找到元素; 通过指针变量计算数组元素地址,找到元素; 指针变量加下标形式; 指针变量依次指向数组中的各元素。 19 【 程序 7 # a5=2,4,6,8,10; i,*p=a; /*数组名加下标形式 */ i=0;i、 =。 例如: a5=2,4,6,8,10; p=a; pA=a+3; a 24681 0a 0 a 1 a 2 a 3 a 4 达式 含义 表达式的值 p+ a1 &a0 *p+ 等价 于 “ *(p+)” , 即 a0的值 , a1。 2 *+p 等价 于 “ *(+p)” 。 a1, *(+p)即 a1的值 。 4 (*p)+ 等价于 (a0)+, a0的值为 3 2 +(*p) 等价 于 +(a0)。 a0的值为 3,整个 表达式的值 为 3。 3 个元素 , 故 。 3 pAp 指向 前面元素的指针变量 “ 小于 ”指向后面元素的指针变量 , 故pAp。 真 a 24681 0a 0 a 1 a 2 a 3 a 4 3p 有关指针的运算 22 一维数组的指针作为函数参数 实参 形参 形式 1 数组名 数组名 形式 2 数组名 指针变量 形式 3 指针变量 数组名 形式 4 指针变量 指针变量 表 7数组名或指针作为函数参数的形式 23 形式 1举例 : ,n) *()=5; =2,4,6,8,10; ); 形参:数组 实参:数组 n) 24681 0a r r 0 ,a r r a y 0 a r ra r r a ya r r + 1a r r a y 数 组a r r + 2a r r + 3a r r + 4a r r 1 ,a r r a y 1 a r r 2 ,a r r a y 2 a r r 3 ,a r r a y 3 a r r 4 ,a r r a y 4 5 形参:指针 24 形式 3举例: ,n) *()=5; =2,4,6,8,10; ); 形参:数组 实参:指针 n) 24681 0a r r a y 0 p A r ra r r a r r + 1a r r a y 数 组p A r r + 2p A r r + 3p A r r + 4a r r a y 1 a r r a y 2 a r r a y 3 a r r a y 4 5 形参:指针 25 【程序 7将数组 图 7 【 问题分析 】 对于 与 值交换,将与 值交换, ,以此类推,将 i与 值交换。很显然,需要用循环来处理此问题, 过推算发现, n/2次。 【 算法设计 】 整型数组 执行数组 定义控制循环变量 i=0。 判定表达式“ i # 5 /*函数功能 : 实现 对 函数 参数 : 整型 数组 a,存放一组整型数据。 整型 变量 n,存放数组元素个数。 函数 返回值:无 */ a,n) i; i=0;i /*函数 ( /*函数 n( 0n2)个学生的成绩 */ *4,n); /*查找 有一门及以上课程不及格的学生,并打印输出他们的全部课程的成绩 */ *4); 4=60,70,80,90,56,89,67,88,34,78,90,66; n; /*调用 (请输入待查找成绩的学生的编号 n( 0n2): n); %d,&n); n); /*调用 ( /*调用 ; 33 /*函数功能 : 求学 生的平均成绩 函数 参数 : 指针 ,指向二维数组的第 0行第 0列 函数 返回值:浮点型值,返回学生的平均 成绩 */ i; ; i=0;i C ; %s n”, ; 指向字符串的指针 变量 38 指向字符串的指针作为函数 参数 【 程序 7利用 字符型数组 作为函数参数,将两个字符串合并为一个新的字符串 。 #1 100 #2 100 # 2 /*函数 ,); 39 1,2,; 请输入第一个字符串 : n); 请输入第二个字符串 : n); 合并后的字符串: ); ; 指向字符串的指针作为函数 参数 40 /*函数功能 : 字符 数组 数 参数 : 字符 数组 符数组 符数组 数 返回值:空 类型 */ ,) i,j; /*将字符数组 (i=0;i!=0;i+) i=i; /*将字符数组 (j=0;j!=0;j+) i+j=j; i+j=0; 指向字符串的指针作为函数 参数 请输入第一个字符串: 输入第二个字符串: 并后的字符串: 1 【程序 7利用 指向字符串的指针变量 作为函数参数,将两个字符串合并为一个新的字符串 。 #1 100 #2 100 # 2 /*函数 字符 指针变量 字符串 ,合并 为字符指针变量 ( 指向字符串的指针作为函数 参数 42 1,2,; 请输入第一个字符串 : n); 请输入第二个字符串 : n); 合并后的字符串: ); ; 指向字符串的指针作为函数 参数 43 指向字符串的指针作为函数 参数 /*函数功能 : 函数 字符 指针 变量 并为 字符指针 变量 符串 。 函数 参数 : 字符 指针变量 符指针变量 字符 指针变量 数 返回值 : 空类型 */ /*将 字符 指针变量 (*=*); /*在删除末尾的 0*/ /*将 字符 指针变量 (*=*); 44 字符数组与字符串指针变量的区别 字符 数组 和 字符串指针 变量 的 区别: ( 1)存储方式不同 字符数组由若干个元素组成,每个元素中存放一个字符。字符串指针变量中存放的是字符串的首地址,而不是将整个字符串存放到指针变量中。 ( 2)赋值方式 C 1; C 1; C ; 指针 与函数 1 2 *指向函数的指针 返回指针值的函数 45 46 返回指针值的 函数 返回 指针 值 的 函数 简称为指针函数。指针函数的定义形式如下: 类型名 *函数名(参数表) 例如: x=3; x; 【说明】 变量 函数 管它的地址仍然可以传递出去,但是这个地址存放的内容在函数 47 【程序 7一个班有 3名学生,各学 4门课。用函数 n( 0n2)个学生的成绩,函数原型为: *4,n); #*函数 n( 0n2)个学生的成绩 */ *4,n); 4=60,70,80,90,56,89,67,88,34,78,90,66; n,i; 请输入待查找成绩的学生的编号 n( 0n2): n); %d,&n); n); /*调用 (i=0;i f) %fn,f); ; *f); /*定义指向函数的指针变量 /*为指向函数的指针变量赋值 */ (* /*通过指向函数的指针 ; 1 指针数组 指针 数组定义的一般形式为: 类型名 *数组名 数组长度 ; ; 的优先级高于 *。 5 * 个元素的数组,每个元素都是一个指向 什么 情况下会用到指针数组呢 ? 指针 数组 比较适合用来指向若干个字符串,使字符串处理更加方便灵活。虽然有时二维数组也可以解决同样的问题,但指针数组比二维数组更常用、更有效。 52 10=“ ”, ” ”,”; =“ ”, ” ”; S u n d a y 0M o n d a y 0T u e s d a y 0W e d n e s d a y 0T h u r s d a y 0F r id a y 0S a tu r d a y 07d a y 11 0d a y 2 0 d a y 2 1 d a y 2 2 d a y 2 3 d a y 2 4 d a y 2 5 d a y 2 6 S u n d a y 0M o n d a y 0S a t u r d a y 0779.程序 7用指针数组输出每周各天信息 。 # /*定义包含 7个元素的指针数组 = ; i; i=0;i /*定义包含 3个元素的指针数组 p*/ p3=; 交换前: %s,%s,%sn,p0,p1,p2); /*交换 p1和 p2*/ p1; p1=p2; p2= 交换后: %s,%s,%sn,p0,p1,p2); ; 交换前: F 交换后: F,p 0 A B C 0H I J K 0E F 0p 1 p 2 p 0 A B C 0H I J K 0E F 0p 1 p 2 55 *指向指针的指针 指向 指针的指针定义形式如下: 类型名 *指针变量名 ; 可 按如下方式去理解: 类型名 *(*指针变量名 ); 例如: *变量 * * 0 1 2 f f 4 0 0 0 1 2 f f 4 4 a p p p c 1 2 f f 4 40 0 1 2 f f 4 00 0 1 2 f f 3 *p, *a ; p=&p; 56 【程序 7用指向指针的指针编程实现程序 7能 。 # /*定义包含 3个元素的指针数组 =; /*定义指向指针的指针变量 *; 交换前: %s,%s,%sn,*(),*(); /*交换 *()和 *()*/ (); *()=*(); *()=交换后: %s,%s,%sn,*(),*(); ; p A r r 0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 没有签劳动合同补偿协议
- 合同协议写作
- 社团合作合同范本
- 工地合同解除协议
- 劳动合同和就业协议书
- 集装箱码头服务协议合同
- 车有事故怎么写合同协议
- 个体联营协议合同
- 广告协议委托合同范本
- 医药销售合同协议
- 【公开课课件】《农业区位因素及其变化》
- (必会)军队文职(数学1)近年考试真题题库(含答案解析)
- 小学女生生青春期心理健康教育五六年级(共14张课件)
- 疫苗预防接种知识竞赛题库及答案2022
- 【贸易战背景下华为公司危机应对措施及其启示18000字(论文)】
- 水泥标准培训考核2024
- 图书馆运营管理服务投标方案(技术方案)
- (落地式、悬挑式脚手架)设备设施风险分级管控清单
- DL∕T 5046-2018 发电厂废水治理设计规范
- DL∕T 1084-2021 风力发电场噪声限值及测量方法
- NB-T47023-2012长颈对焊法兰
评论
0/150
提交评论