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

上传人:sh****n 文档编号:12816317 上传时间:2020-05-26 格式:PPT 页数:29 大小:335.50KB
返回 下载 相关 举报
内存单元的地址-指针程序设计.ppt_第1页
第1页 / 共29页
内存单元的地址-指针程序设计.ppt_第2页
第2页 / 共29页
内存单元的地址-指针程序设计.ppt_第3页
第3页 / 共29页
点击查看更多>>
资源描述
高级语言程序设计,第7章内存单元的地址指针程序设计(2),二维数组批量数据处理的指针版,问题描述:假设有全班60个人3门课程数学、英语、计算机的成绩数据,包括学号,试按每个人的总分对其降序排序。,分析,设已经定义了数组intnumM,gradeMN,totalM=0;要通过input函数获得用户键盘输入的数据然后用chooseSort函数排序,再用print函数打印输出排序的结果,期望使用三个函数,其原型为,voidinput(intnum,intgrade3,inttotal);voidchooseSort(intnum,intgrade3,inttotal);voidprint(constintnum,constintgrade3,constinttotal);,或者,voidinput(int*num,?int*grade,int*total);voidchooseSort(int*num,?int*grade,int*total);voidprint(constint*num,?constint*grade;constint*total);其中指向二维数组grade的指针如何定义和表示还不明确,然后,通过指针访问一维数组或二维数组的元素实现读写数据,指针与二维数组的关系二维数组名与行列地址,注意关于二维数组下面的事实,用指针访问二维数组元素的第一种方法,由前面分析的结果可以看出,直接把二维数组名作为行地址的行地址进行行列偏移既可以访问二维数组的元素即*(*(a+i)+j),如果定义成指针参数该是什么样的指针呢?,voidinput(int*pNum,int*pGrade,int*pTotal);int*pGrade说明的pGrade能指向二维数组grade吗?回答是不能!指针的类型必须与它所指向的变量类型相同pGrade是什么类型?二维数组名grade是什么含义?,用指针访问二维数组元素的第二种方法行指针,指向行地址的指针-行指针,int(*pGrade)3=grade;pGrade是行指针,是有3列的行指针这样pGrade+1就是grade+1pGrade+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);,指针的指针,二维数组名和行指针是一类特殊的指针,它指向的元素是行地址。还有多级指针,最典型的就是二级指针inta=10;int*aPtr=其中*aPPtr就定义了一个二重指针,思考:可以用二重指针指向一个二维数组吗?,例如int*p,a23=1,2,3,4,5,6;p=a;,应该用行指针。或者如下定义的若干个指针构成的指针数组,思考:注意指针数组和行指针的不同,指向函数的指针,函数与数据一样,也要存储在内存中,因此也有首地址。这个首地址就是函数的第一条语句(或指令)在内存中的地址,通常称这个地址为函数的入口地址。怎么定义指向函数的指针变量呢?它的格式与普通的指针变量略有不同,形式如下:数据类型(*指针变量名)(形参参数列表),例如,intmax(inta,intb);intmin(inta,intb);假设它们对应的代码已经放在内存的某个位置,定义一个可以指向这类函数的指针变量定义int(*ifuncPtr)(int,int);则ifuncPtr=max;ifuncPtr就指向了max。同样可以让ifuncPtr指向min。,间接引用函数,inta,b;scanf(“%d%d”,指向函数的指针作为函数的参数,排序算法中,升序和降序的区别仅仅在于排序过程中关系表达式是大于还是小于,除此之外都是一样的。可以用一个指向大于比较或小于比较的函数指针使排序算法函数成为升序降序通用的函数升降的区别就在于比较的时候用大于还是小于,可以定义两个函数,intascending(constinta,constintb);intdescending(constinta,constintb);即intascending(constinta,constintb)returnba;,再定义一个交换函数,voidswap(int*x,int*y);即voidswap(int*x,int*y)inttemp;temp=*x;*x=*y;*y=temp;,选择法升序降序通用函数,voidchooseSort(intnum,intgrade3,inttotal,int(*compare)(int,int)inti,j,k,m,temp;for(i=0;itotalj)/升序/用函数名if(compare(totalk,totalj)k=j;if(k!=i)/交换swap(,指向函数的指针作为参数,升序降序统一起来,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!