1、函数嵌套
2、assert函数
include<assert.h>
形参表填写逻辑或关系表达式,若为假立即终止程序。
3、函数的特性
函数传递都是值传递,而不是修改内存空间,形参的值是开辟另外一个与实参大小相同的 内存空间并把实参的值复制进去,修改也只是修改形参空间的值,不影响实参。
实质:不能在被调函数中修改主调函数的值
函数传参的顺序自右向左
先打印20,再打印10
不允许在函数传参中对变量进行自增、自减,否则会出现错误。
3、从编译器,底层逻辑看函数怎么调用的
主函数执行到函数时会跳转到函数中开始执行,在执行到return后,返回主函数继续执行。
1.栈区
pc寄存器存放将要执行的代码地址
pc进入函数后无法返回函数调用处,就产生了栈
原则:先进后出,后进先出
入栈叫做保护现场,出栈叫做恢复现场
定义的变量储存在栈区
2.堆区
堆区使用需要向操作系统借,使用完需要归还
大小取决于内存条大小
字符串常量区:存储字符串常量,相同的字符串常量只会存储一次,节省内存。
代码区:存储可执行代码,这段内存只读,防止代码被意外修改。
静态区:存放全局变量,方便调用,还有可能包含程序的初始化数据。
3.函数递归(循环)
函数递归:函数直接或间接调用自己本身
无条件的函数自身调用会导致栈区消耗殆尽而程序崩溃
递归计算1~100
计算斐波那契数列第n个数
求斐波那契数列前n项数和: