编程时不能使用TAB键。
相对独立的程序块之间应隔一行。
般情况下,源程序有效注释必须在20%以上。
命名中若有特殊缩写,应有注释。
Add_User这种形式不允许。
#define不能使用数字命名。
函数参数顺序点:函数调用过程中,变量值发生变化的位置(点),称为函数参数“顺序点”。
逗号表达式是有值的。
函数参数求值顺序是从右往左的。
atoi(a[i]):将数字字符串转换为数值。
va_list
递归函数:在函数调用时,直接或间接地自己调用自己的函数称为递归函数。
形式:
- 直接调用------直接递归
- 间接调用------间接递归
递归条件:
- 须有完成函数任务的语句
- 一个确定是否能避免递归调用的测试
- 一个递归调用语句;该语句的参数应该逐渐逼近结束条件,以致最后断绝递归
- 先测试,后递归调用。
1、递归调用不是重新复制该函数,每次调用它时,新的局部变量和形参会在内存中重新分配内存单元,并以新的变量重新开始执行;每次递归返回时,当前调用层的局部变量和形参被释放,并返回上次调用自身的地方继续执行;
2、递归调用一般并不节省内存空间,因为每次调用都要产生组新的局部变量,从而不破坏上层的局部变量;
3、递归调用一般并不能加快程序的执行速度,因为每次调用都要保护上层局部量(现场),而返回时又要恢复上层局部量,占用执行时间;
4、递归函数中,必须有结束递归的条件;
5、递归调用的优点是能实现一些迭代算法难以解决的问题。
1、二叉树的创建、遍历、平衡二叉树实现的代码;
2、哈希表
3、排序方法:二分法、插入法
返回指针值的函数:
格式:类型 *函数名(形参列表)
*函数名两侧不能加括号,由于括号的优先级比*高。首先a与其后参数结合,表明a是函数名,然后与*结合,表明是一个指针形函数。
Int a[3][4]; a[i][j]
a :表示数组名的起始地址
i的地址:a +i*l (l是字节长度)
a[0],a[1],a[2]可看成a[3][4]的关于行的一维数组的数组名
输入序号列出学生的四门课成绩:
函数指针:函数指针是函数的物理入口地址。即是在编译时,分配的物理入口地址。
(可以通过该指针调用函数。)
Int(*p);
int max(int x,int y);
p=max;
取max的值三种形式:max(a,b);p(a,b);(*p)(a,b)
函数返回指针注意事项:
局部变量地址不能返回。
解决:
1、全局变量地址
2、动态分配内存空间
3、静态局部变量
函数定义注意点:
- 错误返回码
- 函数参数的入口参数的检查
- 函数规模的控制
- 功能单一
- 不编写依赖其他内部实现的函数
- 函数参数不必过多
- 结构体作为函数参数时,尽量使用指针
编写字符串所有操作的函数。不允许调用库函数。
一个指针变量8个字节。