内存单元的地址-指针程序设计.ppt

上传人:小飞机 文档编号:5928980 上传时间:2023-09-05 格式:PPT 页数:29 大小:231KB
返回 下载 相关 举报
内存单元的地址-指针程序设计.ppt_第1页
第1页 / 共29页
内存单元的地址-指针程序设计.ppt_第2页
第2页 / 共29页
内存单元的地址-指针程序设计.ppt_第3页
第3页 / 共29页
内存单元的地址-指针程序设计.ppt_第4页
第4页 / 共29页
内存单元的地址-指针程序设计.ppt_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《内存单元的地址-指针程序设计.ppt》由会员分享,可在线阅读,更多相关《内存单元的地址-指针程序设计.ppt(29页珍藏版)》请在三一办公上搜索。

1、高级语言程序设计,第7章 内存单元的地址指针程序设计(2),二维数组批量数据处理的指针版,问题描述:假设有全班60个人3门课程数学、英语、计算机的成绩数据,包括学号,试按每个人的总分对其降序排序。,分析,设已经定义了数组 int num M,grade M N,totalM=0;要通过input函数获得用户键盘输入的数据 然后用chooseSort函数排序,再用print函数打印输出排序的结果,期望使用三个函数,其原型为,void input(int num,int grade 3,int total);void chooseSort(int num,int grade 3,int total

2、);void print(const int num,const int grade 3,const int total);,或者,void input(int*num,?int*grade,int*total);void chooseSort(int*num,?int*grade,int*total);void print(const int*num,?const int*grade;const int*total);其中指向二维数组grade的指针如何定义和表示还不明确,然后,通过指针访问一维数组或二维数组的元素实现读写数据,指针与二维数组的关系二维数组名与行列地址,注意关于二维数组下面的

3、事实,用指针访问二维数组元素的第一种方法,由前面分析的结果可以看出,直接把二维数组名作为行地址的行地址进行行列偏移既可以访问二维数组的元素 即*(*(a+i)+j),如果定义成指针参数该是什么样的指针呢?,void input(int*pNum,int*pGrade,int*pTotal);int*pGrade说明的pGrade能指向二维数组grade吗?回答是不能!指针的类型必须与它所指向的变量类型相同 pGrade是什么类型?二维数组名grade是什么含义?,用指针访问二维数组元素的第二种方法行指针,指向行地址的指针-行指针,int(*pGrade)3=grade;pGrade是行指针,是

4、有3列的行指针 这样 pGrade+1 就是grade+1 pGrade+2 就是grade+2,函数调用可以写成:input(num,grade,total);,注意这里的*grade在前面是*pGrade,用指针访问二维数组元素的第三种方法-把二维数组看成一维数组,对于二维数组gradeMN,定义 int*p=*grade;则 p就是第一列的地址(第一个元素的地址)(第一行的首地址,见前面的图,也就是第一列的地址),p指向了二维数组的第一个元素第i行第j列的元素为*(p+i*N+j)或者写成下标的形式,注意是单下标 pi*N+j,函数调用为:input(num,*grade,total);

5、,指针的指针,二维数组名和行指针是一类特殊的指针,它指向的元素是行地址。还有多级指针,最典型的就是二级指针int a=10;int*aPtr=其中*aPPtr就定义了一个二重指针,思考:可以用二重指针指向一个二维数组吗?,例如 int*p,a23=1,2,3,4,5,6;p=a;,应该用行指针。或者如下定义的若干个指针构成的指针数组,思考:注意指针数组和行指针的不同,指向函数的指针,函数与数据一样,也要存储在内存中,因此也有首地址。这个首地址就是函数的第一条语句(或指令)在内存中的地址,通常称这个地址为函数的入口地址。怎么定义指向函数的指针变量呢?它的格式与普通的指针变量略有不同,形式如下:数

6、据类型(*指针变量名)(形参参数列表),例如,int max(int a,int b);int min(int a,int b);假设它们对应的代码已经放在内存的某个位置,定义一个可以指向这类函数的指针变量定义 int(*ifuncPtr)(int,int);则 ifuncPtr=max;ifuncPtr就指向了max。同样可以让ifuncPtr指向min。,间接引用函数,int a,b;scanf(“%d%d”,指向函数的指针作为函数的参数,排序算法中,升序和降序的区别仅仅在于排序过程中关系表达式是大于还是小于,除此之外都是一样的。可以用一个指向大于比较或小于比较的函数指针使排序算法函数成为

7、升序降序通用的函数 升降的区别就在于比较的时候用大于还是小于,可以定义两个函数,int ascending(const int a,const int b);int descending(const int a,const int b);即int ascending(const int a,const int b)return ba;,再定义一个交换函数,void swap(int*x,int*y);即void swap(int*x,int*y)int temp;temp=*x;*x=*y;*y=temp;,选择法升序降序通用函数,void chooseSort(int num,int grade3,int total,int(*compare)(int,int)int i,j,k,m,temp;for(i=0;itotalj)/升序/用函数名 if(compare(totalk,totalj)k=j;if(k!=i)/交换 swap(,指向函数的指针作为参数,升序降序统一起来,

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号