




全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言编程常见问题分析及对策摘要:本文从作者的经验出发,分析了c语言编程过程中遇到的常见而又非常重要的问题,并提出了解决的办法。关键词:c语言 嵌套 堆栈 指针中图分类号:tp312 文献标识码:a文章编号:1007-9416(2011)11-0195-01c语言是一种面向过程的计算机语言,它的表现能力和处理能力极强,具有丰富的运算符和数据类型,便于实现各类复杂的数据结构。它还可以直接访问内存的物理地址,进行基于bit位的操作。由于c语言实现了对硬件的编程操作,因此c语言集高级语言和低级语言的功能于一体。既可用于系统软件的开发,也适合于应用软件的开发。在c语言的编程过程中,除了要理解c语言的基本知识,要想编写高效简洁可靠的c语言代码,还需要掌握更多的编程经验,处理一些常见的问题。1、最容易犯的错误c语言最容易犯而且结果最严重的问题算是“等于”关系运算符“”。在c语言中,“”为赋值语句,“”为等于关系运算符。而其它很多计算机语言等于关系运算符是“”,因此使用者在分支结构语句中,有时往往把“”写成“”,而其后果往往会导致程序崩溃,而且这类错误还非常不容易发现。解决这一问题的一个很好的方式是,当“等于”关系运算符是常量和变量比较的时候,例如要写if(a= =1),一定要记住形成一个大脑自然反应,就是把常量写在左边,即if(1= =a)。当“等于”关系运算符都是变量比较的时候,最好反应写成“不等于”关系运算符“!”,这样就可以减少犯这种简单、也容易犯的错误。2、内存溢出问题一些c语言的基本函数如内存的拷贝函数(memcpy(), memmove()、字符串的拷贝函数(strcpy(), strncpy()本身的安全性比较差,这些标准函数不判定原内容和目的内容的长度,当原内容长度大于目的内容长度的时候,就会造成内存溢出,导致程序崩盘,在使用这些函数时一定要注意,最好自己写一个函数封装它们替代这些函数功能。3、嵌套循环问题循环语句是一个非常好的结构,它可以节省很多代码,使程序代码看起来非常简单。而对于嵌套循环更是非常精妙,能够解决很多问题,但是由于内循环和外循环的退出条件不同,在某种没有考虑到的异常情况下容易导致死循环,从而造成灾难性的后果。因此,对于一个可靠性要求比较高的程序来说,尽可能减少嵌套循环的使用,只要有可能就把它写成几个单独的循环,对于有十足把握的嵌套循环,也不建议使用。4、堆栈问题一般程序默认的堆栈大小约为1m,虽然程序堆栈大小可以设置,但是为程序堆栈设置较大的值,可能增加内存的开销和启动时间。因此在程序设计时不盲目的为程序设置很大的堆栈空间。因此对于一个大型程序开发,必须要考虑每个函数的堆栈的使用,对于多线程来说,每个函数尽可能节省有限的堆栈空间。特别忌讳在函数中定义局部变量的大型数组,如果在函数中定义一个局部变量的大型数组,就有可能导致定义的数组覆盖堆栈段或代码段中的数据,从而造成程序的崩溃。为节省有限的堆栈段空间:避免使用局部变量的大型数组;尽量避免用长调用或递归函数;避免传递大型结构体,建议用指针代替;定义短寿命变量(像auto类型)。5、指针的使用c语言的难点和精华就是c语言的指针,例如以下几种指针方式:(1)整数指针变量int *ptr;(2)字符指针变量char *ptr;(3)指向整数指针的指针int *ptr;(4)整数数组指针int (*ptr)3;(5)整数指针数组int (*ptr)3;(6)指向整数数组指针的指针int *(*ptr)3。对于初学者来说,还没有看完估计就没有信心了。其实指针也非常简单,别看它的定义很复杂,和普通变量相比,普通变量是用来表示一个数据,每一个数据都存在计算机的地址中;而指针是用来表示一个计算机的地址,对于一个32位程序,所有类型的指针的值都是一个32位整数,它的值是0x00000xffff中的一个。所以对于第一个例子整数指针变量int *ptr=1来说,ptr的值是一个计算机地址,在该地址上保存的是1这个整数;对于第二个例子字符指针变量char *ptr=a来说,ptr的值也是一个计算机地址,在该地址上保存的是a这个字符;对于第三个例子指向整数指针的指针int *ptr=10来说,ptr的值是一个计算机地址,它是用来存放*ptr这个计算机地址的值,*ptr也是一个计算机地址,在该地址上保存的是10这个整数;对于第四个例子整数数组指针int (*ptr)3来说,(*ptr)0,(*ptr)1和(*ptr)2的值都是一个计算机地址,每个值都用来存储一个整数数组的首地址;对于第五个例子整数指针数组int *ptr3来说,它定义了一个数组, ptr是该数组的首地址;对于第六个例子指向整数数组指针的指针int *(*ptr)3来说,它定义了三个指针数组,即*ptr0整数指针数组, *ptr1整数指针数组和*ptr2整数指针数组。只要把指针理解为汇编中的计算机内存地址,应该就能更好的理解指针的功能了。6、汇编语言的嵌入在熟悉汇编语言的人眼里,c语言编写的程序不值得一提,就像c语言和其它高级语言相比。这种说法虽然有些偏激,但是却有它的道理,因为汇编语言是效率最高的计算机语言。不过汇编语言也有它明显的缺点,它太繁琐,不宜阅读,我们不能用汇编语言来写一个几十万行没有什么人能够读懂代码的程序。所以,为了写一个复杂的大型软件,同时为了获得程序的高效率,我们可以采用变通的方法,在c代码中嵌入汇编,混合编程。这样既提高了效率,又增加了可读性。c语言是最难最优秀的编程
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年模型水印检测算法对比试题(含答案与解析)
- 2025年数据清洗缺失值处理(含答案与解析)
- 小学数学实验设计与学生思维进阶的教学实践
- 钢结构施工方案编制范文
- 2025年智慧公交系统智能调度与运营优化评估报告
- 电商平台的知识产权保护与治理:2025年知识产权保护与产业发展研究报告
- 呼吸科感染病例报告制度流程
- 保障高端住宅物业管理服务质量的措施
- 高等教育学科专业设置调整优化的策略及实施路径
- 2025年农村金融服务体系金融科技与农村金融服务创新模式研究报告
- 金融领域反腐
- 应急物业合同范本(2篇)
- 高原施工保障方案
- 《颅内压增高的临床表现》教学课件
- 三洋洗衣机XQB60-M808使用说明书
- DL∕ T 802.7-2010 电力电缆用导管技术条件 第7部分:非开挖用改性聚丙烯塑料电缆导管
- (正式版)CB∕T 4557-2024 船舶行业企业劳动防护用品配备要求
- DL-T-1928-2018火力发电厂氢气系统安全运行技术导则
- JT-T-325-2018营运客运类型划分及等级评定
- 三位数加减法竖式计算-3位数的加减法竖式
- 青少年药物滥用的影响因素与预防方法
评论
0/150
提交评论