指针及引用复习6.ppt_第1页
指针及引用复习6.ppt_第2页
指针及引用复习6.ppt_第3页
指针及引用复习6.ppt_第4页
指针及引用复习6.ppt_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、指针及应用,C语言程序设计 综合复习(6),Project(项目),程序,软件,大型软件的开发需要团队协作,花费很多的时间完成。,在有限的时间里,个人只能完成小型软件的开发,程序设计 VS. 软件开发,Software (软件),for(k=0;k=2;k+) for(i=0;inDim;i+) pYi=pEi+pAk*pDi; pBi=pBi+pAk+1*pDi/3.0; tt=t+pAk; Function(tt,pY,pD); ,for(k=0;k=2;k+) for(i=0;inDim;i+) pYi=pEi+pAk*pDi; pBi=pBi+pAk+1*pDi/3.0; tt=t+p

2、Ak; Function(tt,pY,pD); ,可执行程序(exe)仅包含一个main() 函数,源程序文件,源程序文件,软件模块,可执行程序(exe),可执行程序(exe),可执行程序(exe),软件,Question,for(k=0;k=2;k+) for(i=0;inDim;i+) pYi=pEi+pAk*pDi; pBi=pBi+pAk+1*pDi/3.0; tt=t+pAk; Function(tt,pY,pD); ,for(k=0;k=2;k+) for(i=0;inDim;i+) pYi=pEi+pAk*pDi; pBi=pBi+pAk+1*pDi/3.0; tt=t+pAk;

3、 Function(tt,pY,pD); ,可执行程序(exe)仅包含一个main() 函数,源程序文件,源程序文件,软件模块,指针,指针三部曲,取址,类型声明,引用,题1 分析程序的功能是什么?,void main() char stt=“ab123$GPRMC*”; int i; char *p; p=stt; for(i=0;*(p+i)!=M;i+) ; printf(“%d %c”,+i,*(p+i); ,这个程序ppt拷贝到VC+不能用,#include “stdafx.h” void main() char stt=“ab123$GPRMC*”; int i; char *p;

4、p=stt; for(i=0;*(p+i)!=M;i+) ; printf(“%d %c”,+i,*(p+i); 编译用32个错误,这个程序拷贝到VC+能用.为什么?,#include stdafx.h void main() char stt=ab123$GPRMC*; int i; char *p; p=stt; for(i=0;*(p+i)!=M;i+) ; printf(%d %c,+i,*(p+i); 注意双引号和单引号,题2 分析程序的功能是什么?,void main() /gps_7.c char stt=“ab123$GPRMC*”; int i; char strgps8;

5、char *P,*pt; p=stt; pt=p+5; for(i=0;i5;i+) strgpsi=*(pt+i); printf(“%s”,strgps); ,题3 分析程序的功能是什么?,void main() /gps_8.c char stt=“ab123$GPRMC*”; int i; char strgps8; char *P,; p=stt; for(i=0;i6;i+) strgpsi=*(pt+5+i);/从第5位(第一位为0位) printf(“%s”,strgps); ,#include void main() /ma.c char *p, i; printf (“in

6、put 8 numbers: ”); p = (char*)malloc(8*sizeof(char); for(i=0;i8;i+) scanf (“%d”, p+i); for(i=0;i8;i+) printf(“%d ”,*(p+i); ,题4 分析程序的功能是什么?,题5 分析程序的功能是什么?,struct point /str5.c char name20; Int x; float y; ; void main() struct point po1; scanf(%s %d %f”,, ,参数传递第四个方法-引用传递,当一个函数调用另一个函数时,函数之间数据传递

7、 方式有三种: 值拷贝 地址拷贝 全局函数 函数参数的引用传递方法,是通过在函数原型的参数 表中的参数名的前面加“ int y; int z; ; int sum(struct xyz ,参数传递-引用实例2,#includestdio.h struct xyz int x; int y; int z; ; int sum( xyz ,参数传递-引用实例3(与例2有区别吗?),#includestdio.h class xyz public: int x; int y; int z; ; int sum( xyz ,匿名指针的应用(8155的访问),程序如下: #include /8155_o

8、k.c #include #include #define P8155COM (*(volatile unsigned char xdata *) 0 x2100) #define P8155B (*(volatile unsigned char xdata *) 0 x2102) void delay(); void main(void) P8155COM=0 x02; while(1) delay(); P8155B=0 xff; delay(); P8155B=0 xff; ,单步调试,#include int sum(int *p) int i,summ=0; for(i=0;i5;i

9、+) summ+=(*(p+i); return summ; void main() int a=1,2,3,4,5; int *p=a; printf(%d,sum(a); /15,题6 编程,使用函数调用,求键盘输入的三个整数之积。,题7 编程,输入10个同学的姓名,数学成绩,英语成绩,物理成绩。确定总分最低的同学,并打印姓名及其三门课程的成绩:,参考下面程序 #include stdio.h“ /str_2.c struct Student /*定义结构体struct Student*/ char Name20;/*姓名*/ float Math;/*数学*/ float English

10、;/*英语*/ float Physical;/*物理*/ ;,Examples,void main() struct Student oStu; struct Student oMaxStu; int i; float fMaxScore; float fTotal; printf(nPlease input 10 students and them scoren);/*提示信息*/ printf(-n); printf(Name Math English Physical n); printf(-n); fMaxScore=0;,Examples,for(i=0;i10;i+) scanf

11、(%s %f %f %f“ ,oStu.Name, fMaxScore=fTotal ,Examples,printf(-n); print(%s %f %f %f, oMaxStu.Name,oMaxStu.Math,oMaxStu.English,oMaxStu.Physical); ,例 译电玛,#include”stdio.h” #define max 100 #define change 1 void main() char strmax int i; printf(“enter :n); scanf(“%s”,str); #if(change) ,例2:同上,for(i=0,i=a

12、 ,例2:同上,void main() char stt=“ab123$GPRMC*”; int i; char *p; p=stt; for(i=0;*p!=0 x24;p+,i+) ; printf(“%d %c”,+i,*p); ,例5:裁减已有的字符串,遇*”结束,void main() /gps_9.c char stt=“ab123$GPRMC567*”; int i; char strgps12; char *P,*pt; p=stt; pt=p+5; for(i=0;*(pt+i)!=*;i+) strgpsi=*(pt+i); strgpsi=0; printf(“%s”,s

13、trgps); ,例6(简之):裁减已知长度的字符串,遇*”结束,void main() /gps_10.c char stt=“ab123$GPRMC567*”; int i; char strgps12; char *P; p=stt; for(i=0;*(p+5+i)!=*;i+) strgpsi=*(p+5+i); strgpsi=0; printf(“%s”,strgps); ,例7:未知字符串长度,截取从$”开始遇*”结束,void main() /gps_11.c char stt=“ab123$GPRMC567*”; int i,j; char strgps12; char *

14、P; p=stt; for(i=0;*(p+i)!=$;i+) /用i计一下$的在第几位; ; for(j=0;*(p+i+j)!=*,j+) strgpsj=*(p+j+i); strgpsj=0; printf(“%s”,strgps); ,例8:(清析)未知字符串长度,截取从$”开始遇*”结束,void main() /gps_12.c char stt=“ab123$GPRMC567*”; int i,j; char strgps12; char *P,*pt; p=stt; for(i=0;*(p+i)!=$;i+) /用i计一下$的在第几位; ; pt=p+i; for(j=0;*

15、(pt+j)!=*,j+) strgpsj=*(pt+j); strgpsj=0; printf(“%s”,strgps); ,举例: malloc.c,#include #include main() char *p; clrscr(); / clear screen p=(char *)malloc(100); if(p) printf(Memory Allocated at: %x,p); else printf(Not Enough Memory!n); free(p); /getchar(); return 0; ,例4:同上简之(截取”$GPRMC”),void main() /g

16、ps_8.c char stt=“ab123$GPRMC*”; int i; char strgps8; char *P,; p=stt; for(i=0;i6;i+) /截取”$GPRMC”共6位 strgpsi=*(pt+5+i);/从第5位(第一位为0位) printf(“%s”,strgps); ,举例: malloc.c,#include #include main() char *p; clrscr(); / clear screen p=(char *)malloc(100); if(p) printf(Memory Allocated at: %x,p); else print

17、f(Not Enough Memory!n); free(p); /getchar(); return 0; ,例:,struct point /str5.c char name20; Int x; float y; ; void main() struct point po1; scanf(%s %d %f”,, ,#include void main() /ma_1.c int *p, i; printf (“input 3 numbers: ); p = (int*)malloc(3*sizeof(int); for(i=0;i3;i+) scanf (%d, p+i);

18、 free(p); for(i=0;i3;i+) printf(“%d ”,*(p+i); ,编写程序:接上题:用free()释放内存,然后输出原来三个数?,calloc 函数,calloc()函数,原型: void*calloc(n,size); void 型指针表示该地址并未指明存放何种类型的数据,具体使用时.再通过强制类型转换成某种类型的数据. 用法: #include 或#include 功能:按数据对象的个数分配内存.参数n和size都是unsigned int型.说明:如果分配成功则返回指向被分配内存的首地址(指针),否则返回空指针NULL。 当内存不再使用时,应使用free()函

19、数将内存块释放。calloc的语法是: 指针名=(数据类型*)calloc(n,size) ( 数据类型*)表示指针.,calloc()函数(例),申请500个float 型数据的动态内存.可使用以下程序段: float *p; p=(float *)calloc(500,sizeof(float); if(p=null) exit(1); /不成功返回操作系统,例3:裁减已有的字符串,生成一新的字符串,void main() /gps_7.c char stt=“ab123$GPRMC*”; int i; char strgps8; char *P,*pt; p=stt; pt=p+5; f

20、or(i=0;i5;i+) strgpsi=*(pt+i); printf(“%s”,strgps); ,下面的程序是利用动态内存分配存放n个整数的一维数组,n的值在程序中指定.由键盘输入n个整数存放在该数组中,并计算各元素的平方和.,#include /ca.c #include void main() int n,s,i,*p; printf(“enter dimension of array:”;scanf(“%d”,用malloc()函数更好还是用calloc()函数更好,函数malloc()和calloc()都可以用来动态分配内存空间,但两者稍有区别。malloc()函数有一个参数,

21、即要分配的内存空间的大小:void*malloc(size_tsize);calloc()函数有两个参数,分别为元素的数目和每个元素的大小,这两个参数的乘积就是要分配的内存空间的大小。void*calloc(size_tnumElements,size_tsizeOfElement);如果调用成功,函数malloc()和函数calloc()都将返回所分配的内存空间的首地址。,malloc()函数,函数malloc()和函数calloc() 的主要区别是前者不能初始化所分配的内存空间,而后者能。如果由malloc()函数分配的内存空间原来没有被使用过,则其中的每一位可能都是0;反之, 如果这部分

22、内存曾经被分配过,则其中可能遗留有各种各样的数据。也就是说,使用malloc()函数的程序开始时(内存空间还没有被重新分配)能正常进 行,但经过一段时间(内存空间还已经被重新分配)可能会出现问题。,calloc(),函数calloc() 会将所分配的内存空间中的每一位都初始化为零,也就是说,如果你是为字符类型或整数类型的元素分配内存,那麽这些元素将保证会被初始化为0;如果你是为指 针类型的元素分配内存,那麽这些元素通常会被初始化为空指针;如果你为实型数据分配内存,则这些元素会被初始化为浮点型的零。,编写程序,利用malloc函数开辟动态存储单元,存放输入的三个整数。然后按从大小到大的顺序输出这三个数,#include void main() int *p, tmp, i, j; printf (Input 3 numbers: );

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论