- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
16_第十六章_错误分析.ppt
第十六章 错误分析 C语言的函数仅能传回一个结果,如果想到一个以上变化了的值,应该用指针变量作函数参数,使被调函数通过指针变量指向主调函数中的目标变量的值发生变化, 主调函数就可以利用这些已改变了值的变量。 如:swap(int *pt1, int *pt2){ int t; t=*pt1;*pt1=*pt2;*pt2=t;} main(){ int a,b,*p1,*p2; a=3;b=4;p1=a;p2=b; swap(p1,p2); /*a和b的值已对换*/ printf(%d,%d\n,a,b);} (24) 函数的实参和形参类型不一致。main(){ int a=3,b=4; c=fun(a,b); .......}fun(float x,float y){ ..........}实参a、b为整型,形参x、y为实型。a和b的值传递给x和y时,x和y得到的并非3和4。C要求实参与形参的类型一致。如果在main函数中对fun作原型声明:fun (float, float);程序可以正常运行,此时,按不同类型间的赋值的规则处理,在形实结合后x=3.0, y=4.0。将fun函数的位置调到main函数之前,亦可获正确结果。 (25) 不同类型的指针混用。main(){ int i=3,*p1; float a=1.5,*p2; p1=i; p2=a; p2=p1; printf(“%d,%d\n”,*p1,*p2);}企图使p2也指向i,但p2是指向实型变量的指针,不能指向整型变量。指向不同类型的指针间的赋值必须进行强制类型转换。如: p2=(float*)p1;作用是先将p1的值转换成指向实型的指针,然后再赋给p2。这种情况在C程序中是常见的。例如,用malloc函数创建内存空间,函数返回的是指向被分配内存空间的void *类型的指针。当希望开辟的是存放一个结构体变量的存储单元,要求得到指向该结构体变量的指针,可以进行如下的类型转换: struct student{ int num; char name[20]; float score;}; struct student student1,*p; p=(struct student *)malloc(LEN);p是指向struct student结构体类型数据的指针,将malloc函数返回的void *类型地址,转换成指向struct student类型变量的地址。 (26) 没有注意函数参数的求值顺序。例如有以下语句: i=3; printf(%d,%d,%d\n,i,++i,++i);许多人认为输出必然是 3,4,5实际不尽然。在Turbo C和其他一些C系统中输出是 5,5,4因为这些系统是采取自右至左的顺序求函数参数的值。先求出最右面一个参数(++i)的值为4,再求出第2个参数(++i)的值为5,最后求出最左面的参数(i)的值5。 C标准没有具体规定函数参数求值的顺序是自左而右还是自右而左。每个C编译程序都有自己的顺序,在有些情况下,从左到右求解和从右到左求解的结果是相同的。例如fun1(a+b,b+c,c+a);fun1是一个函数名。3个实参表达式a+b、b+c、c+a。在一般情况下,自左至右地求还是自右至左地求这3 个表达式的值,其结果是一样的。但不总是这样,前面举的例子就不相同。因此,建议最好不使用会引起二义性的用法。如在上例中,希望输出“3,4,5”时,可以改用 i=3; j=i+1; k=j+1;printf(%d,%d,%d\n,i,j,k); (27) 混淆了数组名与指针变量的区别。main(){ int i,a[5]; for(i=0;i<5;i++) scanf(“%d”,a++);}企图通过改变a(使之下移)来遍访欲输入数据的数组元素。此错误在于不了解数组名代表数组首地址,其值是不能改变的,用a++是错误的,应当用指针变量来指向各数组元素。即: int i,a[5],*p; p=a; for(i=0;i<5;i++) scanf(“%d”,p++); 或 int a[5],*p; for(p=a;p<a+5;p++) scanf(%d,p
您可能关注的文档
- Electophilic Aromatic Substituion - Blinn College:亲电芳香取代-宾氏学院.ppt
- H风险控制管理介绍【企业风险管理经典】.ppt
- 运动品牌零售概念(P30).ppt
- 第5章二叉树模型与美式期权的风险管理【企业风险管理经典】.ppt
- 智慧油田大数据云平台解决方案_图文.ppt
- 高一数学(指、对数函数与反函数).ppt
- slides (data mining)幻灯片(数据挖掘).ppt
- Financial Globalisation - Welcome to the University of Warwick金融全球化——欢迎来到华威大学.ppt
- 20100323高二生物(植物细胞工程1).ppt
- chapter01-风险管理导论【企业风险管理经典】.ppt
- 9-非稳态导热.ppt
- 英语:Unit5《First Aid》课件-Listening(新人教版必修5).ppt
- PPT模板-广告公司简介:天之涯文化传播.ppt
- 创新管理的管理技术--策略联盟【企业创新】.ppt
- Computer Skills - Philadelphia University Jordan Home Page计算机技能-费城大学乔丹主页.ppt
- 英语:Unit 2《 Healthy eating》课件(新人教必修3).ppt
- EARLY CHILDHOOD PROFESSIONAL DEVELOPMENT幼儿教师专业发展.ppt
- 产品介绍--互动 营销【企业广告传媒】.ppt
- 地铁华苑砂加气QC成果完成版.ppt
- 11月份中心组第一次集中学习内容.ppt
文档评论(0)