C语言练习总结

来源:互联网 发布:淘宝卖家怎么取消订单 编辑:程序博客网 时间:2024/05/18 15:23

第1章 预处理、宏定义
使用宏的注意事项:
1.宏表达式要加括号,包括变量括号,表达式括号,避免隐藏的错误。
 如:#define Max(a,b) ((a)>(b)?(a):(b))
2.宏里面不要带返回语句,如 return;
3.使用宏提高源程序的可维护性、工作效率等,但要使用得当。

第2章 数据类型、数据结构
1.搞清联合体和结构体的区别,以及在内存空间上的占用情况。
2.搞清堆栈、队列、顺序存储结构和逻辑存储结构的概念和区别等。
3.数组、指针、指针数组、数组指针的区别。
4.二维数组的定义等。

第3章:变量、运算
1.多重循环中把循环次数多的放内层,循环次数少的放外层。
2.在for/while等循环中,注意循环条件的截止,避免死循环出现。
3.变量定义后要初始化,避免对未初始化的变量进行操作导致的错误。
4.全局变量和局部变量变量名不要一致,如果变量名一致在局部函数中操作的是局部变量。
5.在for/while等循环中,对数组操作,注意阈值的取值,避免数组越界的情况。
6. sizeof对字符串的计算,如char ah[] = "\\\0w\0";  sizeof(ah)=5。
7. sizeof对结构体计算,如struct BBB{…}*p;(假设struct BBB共24个字节) p=0x100000; p+0x1=0x100018;(unsigned long)p + 0x1=0x100001;(unsigned long *)p+0x1=0x100004;(char *)p=0x100001;
8.局部变量占用空间不能太大,否则堆栈空间将不足。
9.函数入参要注意检查有效性,特别是指针。
10.scanf输入除了字符串外,其他变量注意都要取地址符&。

第4章:数组、字符串、指针、引用
1.函数传入的形参如果是指针要记得做指针的有效性判断。
2.注意内存泄露的情况,函数异常退出时务必记得打扫战场。
3.字符数组,注意区别:存入0,即结束符'\0';存入'0',是字符'0'。
4.搞清指针对数组的操作,数组的特殊之处:利用取地址符取地址永远是首地址,无限循环。

第5章:字节序、字节对齐
1.大端模式(Big-endian):字数据的高字节存储在低地址中,低字节存放在高地址中;小端模式(Littile-endian):字数据的低字节存储在低地址中,高字节存放在高地址中。
2.网络字节序默认是大字节序!Intel的X86 CPU用的是小端字节序,IBM 的 PowerPC 用的是大端字节序。
3.大端模式和小端模式,对低位的操作(修改、替换),百考不厌,细节很重要。
4.搞清结构体中元素的排列、多少字节对齐对结构体占用空间的影响。
1字节对齐:short、long不用符合偶字节或4字节对齐。
2字节对齐:short要符合偶字节对齐,long要符合4字节对齐。
4字节对齐:short要符合偶字节对齐,long要符合4字节对齐。
5.注意union和struct的字眼,计算占用空间大小时区别很大!
6.sizeof对union和struct的计算,都是按char字节为单位计算!
7.注意指针数组的占空空间计算,如下:
UCHAR *pucCharArray[10][10];
sizeof(pucCharArray) = 400

第6章:资源申请释放、越界、溢出
1.注意内存越界的问题:
内存空间分配长度不够,strcpy函数拷贝越界
类型转换导致函数调用时写内存越界(如:char强制转换为int导致的写内存越界)
数组越界,关注最后一个元素(如:unsigned char Array[MAX_LEN]; ...  for (  int i = 0; i <= MAX_LEN; i++ ){...})
2.避免使用大的局部变量,可能导致堆栈溢出。
3.过程/函数中分配的内存,如果不再使用,在过程/函数退出之前要释放。
4.过程/函数中分配的内存,如果过程/函数异常退出时要释放。
5.在申请内存的函数中,传入的要是二级指针,返回一级指针。如: