收藏 分享(赏)

第7讲 返回指针值的函数-指针数组-指向指针的指针.ppt

上传人:hwpkd79526 文档编号:7249128 上传时间:2019-05-10 格式:PPT 页数:18 大小:425KB
下载 相关 举报
第7讲 返回指针值的函数-指针数组-指向指针的指针.ppt_第1页
第1页 / 共18页
第7讲 返回指针值的函数-指针数组-指向指针的指针.ppt_第2页
第2页 / 共18页
第7讲 返回指针值的函数-指针数组-指向指针的指针.ppt_第3页
第3页 / 共18页
第7讲 返回指针值的函数-指针数组-指向指针的指针.ppt_第4页
第4页 / 共18页
第7讲 返回指针值的函数-指针数组-指向指针的指针.ppt_第5页
第5页 / 共18页
点击查看更多>>
资源描述

1、第7讲 指针,内容: 返回指针值的函数 指针数组 指向指针的指针,返回指针值的函数,函数的返回值可以是一个指针类型的数据(即地址),返回指针值函数的定义格式: 函数类型 * 函数名( 形参列表 ) 函数体; ,说明:定义一个返回指针值的函数与定义普通函数的格式基本类似,只是在函数名前加 * , 表明该函数返回一个指针值,例: int * fun ( int a , int b ) 函数体 ; ,例3-4求某班成绩的平均分, 最高分和最低分 要求用返回指针值的函数实现,分析: 通过函数average的返回值得到保存平均分变量的地址, 进而得到平均分, 函数中将平均分变量定义成静态的, 这样函数结

2、束后该变量仍然存在。,&aver1,&aver1,81,返回指针值的函数,void main( ) int n;float x=0, y=100, *p;printf(“input n:”);scanf(“%d“, ,例3-4 程序代码,静态局部变量,float *average(int n, float *max, float *min) int i; float s, *aver, sum=0;static float aver1;aver= ,例3-5: 编写一个alloc(n)函数,用来在内存区开辟n个字节的连续空间, 该函数的返回值是一个指针,指向新开辟的空间的起始地址,提示:先在内

3、存申请一个相当大的连续空间(如1000个字节), 然后在此区域内进行开辟空间的操作。假设指针变量p原来指向未用空间的开头, 调用alloc(n)函数后, 开辟了n个字节供程序使用, 而指针变量p的值应变成p+n, 同时将新的p值返回, 表示可以利用从此位置开始的存储单元。如果要开辟的空间太大, 超过了预设的空间, 则alloc(n)函数应返回空指针NULL, 表示开辟失败。,buf0 buf1: buf20: buf999,p,返回指针值的函数,例3-5 程序代码 #include #include #define SIZE 1000 char bufSIZE ; char *p=buf ;

4、char *alloc( int n) char *begin ;if ( p+n = buf+SIZE ) begin=p; p=p+n;return(begin);else return(NULL); ,void main( ) char *p1,*p2 ; p1=alloc(10);strcpy(p1,”123456789”);p2=alloc(5);strcpy(p2,”abcd”);printf(“buf=%pn”, buf);printf(“p1=%pn”, p1);printf(“p2=%pn”, p2);puts(p1); puts(p2);for(int i=0 ; i15

5、; i+)printf(“%c”, bufi); ,返回指针值的函数,全局变量,输出地址,buf0 buf1: buf9 buf10: buf14 buf15: buf999,buf+10,buf,buf,buf+10,1 2 : 9 0,a : 0,10,buf+15,buf+10,5,char *alloc( int n) char *begin ;if (p+n = buf+SIZE) begin=p; p=p+n;return(begin);else return(NULL); ,p1=alloc(10);,p2=alloc(5);,p是一个指针数组, 它有3个元素, 每个元素是一个整

6、型指针变量, 可指向一个整型数据,概念: 一个数组的元素均为指针类型的数据,则该数组称为指针数组,即:指针数组的每一个元素都是一个指针变量,定义格式: 类型名 *数组名数组长度;,int *p3;,int x, y, a4; p0=,&x,&y,a,指针数组,指针数组用得最多的是“字符型指针数组”,利用字符指针数组可以指向多个长度不等的字符串,使字符串处理起来更方便、灵活,节省内存空间。,指针数组,char *p4;,定义一个4个元素的字符指针数组p,其中每个数组元素是一个字符指针,可以指向一个字符串,指针数组,例2-4: 编程将书名按字母顺序排序后输出,方法1: 用二维字符数组编程实现,思考

7、: 二维字符数组定义成多大合适? 采用什么方法进行排序? 字符串怎样比较和交换?, 第一维的长度取决于有几本书第二维的长度由最长的书名决定, 可使用冒泡排序或选择排序, 字符串的比较和交换应使用相应的字符串函数,#include #include #define MAXLEN 7 #define N 4 void main( ) int i, j; char tempMAXLEN;char nameNMAXLEN=“Pascal“,“VC“,“Basic“,“Java“;printf(“before sorted:n“);for(i=0; i0) strcpy(temp, namei);str

8、cpy(namei, namej);strcpy(namej, temp);printf(“nafter sorted:n“);for(i=0; iN; i+) puts(namei); ,/书名的最大长度+1,/书的数量,选择排序,/输出排序前的书名,/输出排序后的书名,例2-4:方法1: 用二维字符数组编程实现的程序代码,例2-4: 方法2: 用指针数组编程实现,注意: 排序时是交换指针变量的指向,#include #include #define N 4 void main( ) int i, j; char *temp=NULL;char *pN=“Pascal“, “VC“, “Ba

9、sic“, “Java“;printf(“nBefore sorted:n“);for(i=0; i0) temp=pi; pi=pj; pj=temp; printf(“nAfter sorted:n“);for(i=0; iN; i+) puts(pi); ,交换的是字符串的起始地址,例2-4: 方法2: 用指针数组编程实现的程序代码,for(i=0; i0) temp=pi; pi=pj; pj=temp; ,例2-4: 方法2的过程演示,i=0, j=1 PV,temp,2100 2107 2110 2116,i=0, j=2 PB temp=p0; p0=p2; p2=temp;,2

10、100,p0 p1 p2 p3,2110,2100,i=0, j=3 BJ,i=1, j=2 VP temp=p1; p1=p2; p2=temp;,2107,2100,2107,i=1, j=3 PJ temp=p1; p1=p3; p3=temp;,i=2, j=3 VP temp=p2; p2=p3; p3=temp;,2100,2116,2100,2107,2100,2107,指向指针的指针,int x, *q,*t; x=36; q=,2010,2026,思考: q=45; *q=45; *t=56; *t=56;,对,错,因为q是指针变量,赋值号右侧必须是地址,错,因为t是二级指针

11、变量,*t等价于q,对,指向指针的指针,char *p4=“Pascal“, “VC“, “Basic“, “Java“; char *q; q=p; for( ;qp+4;q+)puts(*q);,思考: int a34; int *p; p=a;,int a34; int (*p)4; p=a;,对,错,虽然在定义p的时只用了一个*,但p实际上是一个二级指针变量,虽然a是二级地址,p是二级指针变量,但它们的含义不同 a指向的是一行整型数据,它包含4个元素 p指向的是一个整型指针变量,作业:,习题10.12,某班期末考试有门课程, 班级人数不确定, 要求计算每个学生的总分和平均分, 按以下格式输出数据,NO. S1 S2 S3 SUM AVE1 97 86 92 276 922 92 91 90 273 91 3 90 81 82 253 84 : : : : : :,要求: 1. 学生人数由键盘输入2. 编写输入函数输入学生的学号和3门课的成绩3. 编写函数计算每个学生的总分和平均分4. 编写输出函数按格式输出数据,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 中等教育 > 小学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报