- 27
- 0
- 约2.7千字
- 约 6页
- 2021-08-11 发布于山东
- 举报
C语言编程常见问题分析及对策
C语言编程常见问题分析及对策
PAGE / NUMPAGES
C语言编程常见问题分析及对策
语言编程常有问题剖析及对策
纲要:本文从作者的经验出发,剖析了 C 语言编程过程中碰到的常有而又特别重要的问题,并提出
认识决的方法。 重点词: C语言 嵌套 货仓 指
针
中图分类号: TP312 文件表记码: A 文章编号:
1007-9416(2011)11-0195-01
语言是一种面向过程的计算机语言,它的表现能力和办理能力极强, 拥有丰富的运算符和数据种类,便于实现各种复杂的数据构造。它还能够直接接见内存的物理地点,进行鉴于 bit 位的操作。因为 C 语言实现了对硬件的编程操作,所以 C 语言集高级语言和初级语言的功能于一体。既可用于系统软件的开发,也合适于应用软件的开发。
在 C 语言的编程过程中,除了要理解 C 语言的基本知识,要想编写高效简短靠谱的 C 语言代码,还需要掌握更多的编程经验 ,办理一些常有的问题。
1、最简单犯的错误
语言最简单犯并且结果最严重的问题算是“等于”关系运算符“==” 。在 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 位整数,它的值是 0x0000-0xffff 中的一
个。所以关于第一个例子整数指针变量
int *ptr=1
来说,
ptr
的值是一个计算机地点,在该地点上保留的是
1
这个整数;关于第二个例子字符指针变量
char *ptr=
’
a’来说, ptr 的值也是一个计算机地点,在该地点上保留的是’ a’这个字符; 关于第三个例子指向整数指针的指针 int *ptr=10 来说,ptr 的值是一个计算机地点,它是用来寄存 *ptr 这个计算机地点的
原创力文档

文档评论(0)