《c和指针》笔记5
递归
C通过运行时堆栈支持递归函数。的哦贵函数就是直接或间接调用自身的函数。
递归函数所需要的2个特性:
1、存在限制条件,当符合这个条件时递归便不再继续。
2、每次调用之后越来越接近这个限制条件。
递归函数在实现方面更加接近问题的抽象定义,也更加清晰,然而在运行时的开销却是非常巨大的。
因此在某些情况下应该考虑用迭代来替代递归,使用递归的时候要慎重考虑。对于开销以及代码实现的清晰度上的抉择要慎重。
可变参数
可变参数与C#的params很相似,但是C中是以省略号(...)来表示的,不同的地方是:
1、C中的可变参数必须从头到尾按顺序逐个访问。
2、可变参数没有原型,所以所有作为可变参数传递给函数的值都将执行缺省(默认)参数类型提升。
3、va_arg无法正确识别作用域参数之上的缺省类型提升,在调用的时候容易制定错误的类型,导致一些无法预测的错误。
4、需要指定可变参数的长度变量。
*由于char、short、float类型实际上是以int或double类型的值传递给函数,所以在va_arg中使用后面这些类型时应该小心。
今天的学习笔记就到这里,明天继续,加油!