函数参数和函数的值
一、形式参数 和 实际参数
1.调用函数时,主调函数和被调函数之间又数据传递关系,这是有参函数;
2.在定义韩式时函数名后面括号中的变量名称为形参
3.主调函数中调用一个函数时,函数名后面括号中的参数为实参
4.实参和形参有着不同的内存空间,无法在被调用函数中去修改实参的数值;
调用函数时的返回值类型应该与子函数前的数值类型一致;
被调函数无法向主调函数反馈错误,一般用返回-1的方法让主函数来判断错误;
引用assert( )命令可以提前终止程序;
值传递,仅仅只是把变量的值传递到子函数中去;
参数的传递方式
自左向右
在传参时不能对同一个参数进行自加或者自减;
二、有关栈
子函数从被调用时开始跳转,第一条指令被称为入口地址;
子函数被暂时保存在栈中去,遵循FILO原则,先进后出,后进先出的原则
分为入栈和出栈两个行为,
向子函数跳转时,会先向栈入住一个主函数该处的地址,执行到return时,进入栈返回到主函数、
栈所在的内存空间被称为“栈区“;栈区的内存是有限的;
一些相关的存储区域
堆区:需手动申请和销毁,取决于物理内存的大小
字符串常量区:字符串存放的地方
静态区也称为全局区:专门存储那些与进程有关的变量和初始化的常量;
代码区 用于存放代码的地址区域;
栈帧 一块一块的栈组成的区域;
三、函数的嵌套调用
在一个函数中又调用另一个函数
不能嵌套定义函数,但可以嵌套调用
四、函数的递归调用
函数嵌套调用的一种特殊形式
分为间接递归调用和直接递归调用
直接递归调用不等于死循环,无条件的函数递归调用会把栈区消耗殆尽,进而到导致程序崩溃