已阅读5页,还剩43页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Lesson18数据的组织结构,学习目标:,1,使用指针作为函数参数,例:将两个数从大到小输出要求:通过使用函数的方法,voidswap(int*p1,int*p2);intmain()inta,b;int*p_1,*p_2;scanf(%d%d,5,9,2000,2004,5,9,COPY,5,做法1,lesson18_01_1.c,voidswap(int*p1,int*p2);intmain()inta,b;int*p_1,*p_2;scanf(%d%d,5,9,2000,2004,COPY,2000,地址传递,2000,2004,做法2,lesson18_01_2.c,例:从键盘输入10个数,输出最大值,分析:定义一个函数,该函数返回最大值的地址,#includeint*findMax(int*array,intlen);voidinput(intarray,intlen);intmain()inta10;int*max;input(a,10);max=findMax(a,10);printf(“最大值为=%d”,*max);return0;,lesson18_02.c,int*findMax(int*array,intlen)int*p,*pmax=array;for(p=array;parray+len;p+)if(*pmax*p)pmax=p;returnpmax;,voidinput(intarray,intlen)inti;for(i=0;ilen;i+)scanf(“%d”,array+i);return;,请注意参数的定义和函数中的使用方式!,结论:函数的形参是指针和函数的形参是数组二者本质是一致的,都是传入的是一个地址,从键盘输入10个数,按从大到小的顺序输出,分析:在主函数中定义数组data10调用input函数,给data数组输入值从data0开始的10个变量的中最大值的地址(findMax函数),将其和data0交换(swap函数)从data1开始的9个变量的中最大值的地址(findMax函数),将其和data0交换(swap函数)从data2开始的8个变量的中最大值的地址(findMax函数),将其和data0交换(swap函数)直道data8为止调用output函数输出数组data的值,循环,定义函数output,输出长度为l的数组a,voidoutput(inta,intl)inti;for(i=0;il;i+)printf(%4d,ai);return;,int*max(int*a,intl)int*maxp=a,i;for(i=0;il;i+)if(*maxp*(a+i)maxp=a+i;returnmaxp;,定义函数max,找出长度为l的数组a中最大值的地址,lesson_18_px.c,主函数,intmain()intdata=1,4,6,7,0,8,2,10,12,9;int*mp,i,t;printf(排序前n);output(data,10);for(i=0;i10;i+)mp=max(,注意max(int*p;p=,2000,2000,变量p也有地址,3000,如何取变量p的地址,int*p;p=,2000,2000,3000,保存变量p的地址?,定义指针变量,int*,*,pp;,pp保存一个整型指针变量的地址!,intx=0;int*p;int*pp;p=pp=int*p,i;p=,输出二维数组的值,lesson18_a.c,inta34;,二维数组全理解,指针与二维数组的关系假设有下列定义:#defineROWNUM5#defineCOLNUM4intaROWNUMCOLNUM;int*ptr1;int(*ptr2)COLNUM;/*指针类型为intCOLNUM*/输出二维数组的每个元素内容,方法一:ptr1=a0;for(i=0;iROWNUM;i+)for(j=0;jCOLNUM;j+)printf(%3d,*(ptr1+i*COLNUM+j);printf(n);,lesson18_a2.c,方法二:ptr2=a;for(i=0;iROWNUM;i+)for(j=0;j=j;位于上三角元素的坐标特点是ij。,#include#defineNUM7intmain()intaNUMNUM;int*ptr,i,j;/*构造下三角方阵*/for(i=0;i=j)*(ptr+j)=j+1;/*ptr+j指向ptr所指行的下标为j的元素*/else*(ptr+j)=0;,/*输出下三角方阵*/for(i=0;iNUM;i+)ptr=*(a+i);for(j=0;jNUM;j+)printf(%3d,*(ptr+j);printf(n);return0;,lesson18_03.c,已知有4个同学的3门课程的成绩,输出每门课程的最高分,要求:1、定义函数findMax(int*a,intlen),查找从a开始的后面len个变量的最大值的地址2、在主函数调用该函数输出最高分。,inta10int*d10,a是数组,元素类型为整型d是数组,元素类型为整型指针,d,a,d0=char*color5=“red”,“green”,“yellow”,“blue”,“white;/*初始化*/for(i=0;i=4;i+)printf(%10sn,colori);return0;,lesson18_04.c,在程序中有5种颜色,将其输出,我们还可以声明一个指针变量让它指向一个数组,int(*p)5;,p就是一个指针,要指向一个含有5个int类型元素的数组,指向其他的就会出现问题。,字符串是一种以字符0作为结束标志的字符数组。表示字符串可以有下面几种方法:charstr1=“ThisisaCprogram.”;char*str2=“ThisisaCprogram.”;char*str3=(char*)malloc(sizeof(char)*25);strcpy(str3,str2);str1是一个含有21个元素的字符型数组,前20个元素用来存放字符序列“ThisisaCprogram.”,最后一个元素存放字符串结束符0;str2是一个指向字符串常量的指针;str3指向一块动态申请且可以放置25个字符的存储空间,调用strcpy()函数的目的是将str2所指向的字符串常量复制到str3指向的存储空间中。,字符数组与字符指针的重要区别,charsa=Thisisastring;char*sp=Thisisastring;,sa,sp,如果要改变数组sa所代表的字符串,只能改变数组元素的内容如果要改变指针sp所代表的字符串,通常直接改变指针的值,让它指向新的字符串,字符数组与字符指针的重要区别,示例,charsa=Thisisastring;char*sp=Thisisastring;strcpy(sa,Hello);sp=Hello;sa=“Hello”;非法数组名是常量,不能对它赋值,#includeintmain()inta=1,b=2,c=3;int*p;p=,分析程序结果,lesson18_c.c,分析程序结果,#includeintmain()intx=0 x434241;char*p;p=,lesson18_d.c,分析程序结果,#includeintmain()intx=0 x434241;charc=A;floatf=123.4;void*p;p=,lesson18_e.c,强制类型转换,分析程序结果,#includeintmain()intb,a5,i;for(i=0;i=5;i+)ai=i;printf(a0=%dn,a0);printf(a5=%dn,a5);printf(b=%dn,b);return0;,b,a0,a1,a2,a3,a4,a5,i,将a和b换个位置?,lesson18_f.c,所谓动态是指在程序运行之后,再根据实际需求申请相应的存储空间,这样既可以满足用户在确定所需的元素数量之后再申请空间,也可以提高存储空间的利用率。,(1)了解需要多少内存空间(2)利用C语言提供的动态分配函数来分配所需要的存储空间。(3)使指针指向获得的内存空间,以便用指针在该空间内实施运算或操作。(4)当使用完毕内存后,释放这一空间。,void*malloc(unsignedsize)在内存的动态存储区中分配一连续空间,其长度为size若申请成功,则返回一个指向所分配内存空间的起始地址的指针若申请内存空间不成功,则返回NULL(值为0)返回值类型:(void*)将malloc的返回值转换到特定指针类型,赋给一个指针,void*p;表示p是一个通用指针,使用可以保存任意类型变量的地址,使用时,需要强制转换成特定类型的指针类型,voidfree(void*ptr)释放由动态存储分配函数申请到的整块内存空间,ptr为指向要释放空间的首地址。当某个动态分配的存储块不再用时,要及时将它释放,voidfree(void*ptr)释放由动态存储分配函数申请到的整块内存空间,ptr为指向要释放空间的首地址。当某个动态分配的存储块不再用时,要及时将它释放,lesson18_h.c,/*11235.*/intmain()inti,n,*p;printf
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 内衣购销协议书范本
- 材料协议合同书样本
- 区块链服务合同范本
- 机械租赁个人协议书
- 广东佛山市乐从镇事业单位招考易考易错模拟试题(共500题)试卷后附参考答案
- 常熟市城市经营投资限公司招考工作人员易考易错模拟试题(共500题)试卷后附参考答案
- 不能达成调解协议书
- 校级结对交流协议书
- 宁波市交通运输委员会委管委属事业单位招考高层次人才易考易错模拟试题(共500题)试卷后附参考答案
- 农村办酒场合同范本
- 数据新闻与信息可视化 课件 第一章 数据新闻与可视化概论
- 2024年宁波市水务环境集团有限公司招聘笔试参考题库含答案解析
- 嵊州嘉洋纺织有限公司面料技术改造项目环境影响报告
- 110kv各类型变压器的计算单
- 华友岗位职级图
- 《商务礼仪与沟通》项目十
- 了不起的我课件完整版
- 三菱HOPE电梯的故障码
- 抖音企业号操作文档最新版
- YC/T 145.2-2012烟用香精相对密度的测定
- GB/T 5709-1997纺织品非织造布术语
评论
0/150
提交评论