阅读论文:C语言编程技术的分析研究

一、C语言易错点

1.多种混合类型数据的混合运算

多种数值型数据在进行混合运算时,系统会自动进行数值类型的转换,可能导致数值误差和溢出(尤其是float和double型)

2.指针

①定义一个指针变量但没有初始化,野指针

野指针随机指向某个内存地址,指针所指内存直接赋值操作,将该单元中原有的数据覆盖,使该数据丢失;若指向系统的数据区中,会导致系统运行的异常甚至死机

②动态分配malloc(size)在堆上分配size个字节的连续空间,调用结束后返回一个指向分配好的储存空间的指针,编程时必须在使用完该储存空间后调用对应的函数free( )来释放掉

③栈溢出

局部变量指针出现使用错误,会发生栈溢出

④堆溢出

⑤void的用法

void malloc(size)表示函数的返回值可以转换成任何类型的地址值(如 char *,int * 等)   void不能用来定义数值变量,可以定义指针变量(可以将任何数据类型的地址赋给指针变量)

⑥数组和指针变量在使用过程中的不同

指针可以通过加减数值来移动它所指的位置(p++正确,char k[20];k++;错误)

⑦指针移动时挪动的位移与指针所定义的类型相关,指针变量在使用时要与定义的类型相一致

char c[10];     int * d;     d=c;    ×

⑧int(*a)[10] 指向十个整形数组的指针变量          int * a[10]指向10个整型数组的指针元素

⑨指针变量作为函数的形参时,实参传递过来的应是对应变量的地址,而不是变量名

3.多重运算

①在大多数C编译系统中,系统对参数的求值顺序是自右向左

②避免引起二义性的写法

4.字符串长度计算

sizeof( )查看一个实体在储存中所占的字节数,包含字符串的结束符\0   struct b{.......}可用sizeof(b)查看一个结构体b所占的字节数

计算一个字符串的长度是不包括结束符的  用strlen( )

字符串操作以str开头的库函数用strlen( )

二、程序优化

1.register的使用

register变量运行时不占用内存空间,而是放在CPU中寄存器中运算,故速度快     程序中循环的局部变量可以定义为register变量使用,但CPU中寄存器数量有限,函数中不能使用太多的寄存器变量

2.循环体内的优化

①可多采用宏定义(#define)

②在多重循环中,最长的在最内层

3.指针代替数组下标

4.库函数的使用

效率低的库函数可以用自己编写的函数代替

5.符合赋值运算

6.位操作

7.数学方法优化


















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值