函数:
是用于完成特定任务的程序代码的自包含单元。
函数分类:
真函数:返回一个值的函数。
过程类型的函数:无返回值。
函数定义:函数体的实现,函数体是一个代码块,它在函数被调用时执行。
函数声明:提高了编译器在函数调用时检查错误的能力。
函数参数:
c函数的所有参数均以"传值调用"方式进行传递,值意味着函数将获得函数值的一份拷贝。
当传递指针时也是拷贝指针值,只不过指针指向的位置是一样的。
ADT和黑盒:
ADT,abstact data type, 抽象数据类型,它可以限制函数和数据定义的作用域。这个技巧被称为黑盒(block box)设计。
抽象数据类型的想法是很简单的:模块具有功能说明和接口说明,前者说明模块所执行的任务,后者定义模块的使用。
递归与迭代:
递归:优点在于为某些编程问题提供了最简单的解决方法,缺点是一些递归算法会很快耗尽计算机内存资源,同时使用递归程序难于阅读和维护。
尾递归:最简单的递归形式,即把递归调用语句放在函数结尾(恰在return语句之前),尾递归可以很容易转换成一个简单循环(效率高很多)。
递归所需两个特性:
1.存在限制条件,当符合这个条件时递归便不再继续。
2.每次递归后越来越接近这个限制条件。
注意:
1.形参表为空时,填入void表明函数没有任何参数(避免编译器误认为函数是旧式函数声明或定义).
2.函数名与函数返回类型分两行书写,这种写法更容易查找函数名。
3.值的类型不是值的内在本质,而是取决于它被使用的方式。
4.一个值的类型无法简单的通过检查它的位模式来判断,机器无法识别,编译器告诉它怎么做它就怎么做。
5.传递数组名时,函数得到的只是一个指针(数组名拷贝),如果需要使用数组长度,需通过函数参数显示指定,在函数体内用sizeof计算得到的只是指针的长度(一般为4)。