1.函数实现
1.类型标识符(返回值的类型标识符)
2.函数名--------和函数功能对应
3.形式参数-----函数接受数据入口
不一定要有,看函数的功能需要,没有形参,一般写void替代位置。
使用标准:
a.个数相同
b.类型匹配
c.顺序匹配:从右向左。
4.函数体--------功能的代码
5.返回值类型
如果没有,返回值类型一般写成void
返回值类型如果不写,默认为int型。
返回值是指函数结束后,其函数的值为多少,一般用于if(函数)这种判断情况。
函数定义 如: int add(int a,int b)
{
功能
}
使用时直接使用 add(参数1,参数2)即可实现所规定的功能
若使用 add(参数1,参数2);则是函数调用语句,成为语句的一部分(参数),声明时也加分号,函数一般放在主函数之前,放在后面则必须声明。
2.函数执行时,内存运行
1.不同函数储存在不同空间,程序执行时先查找main函数,先在保护现场(放入内存)保护主调函数的相关数据以及返回值地址据,然后跳到次级函数,执行完次级函数后,恢复现场。
main函数先存入栈底,然后次级再存入(栈的本质是块空间),用时先使用最后存的,后使main.
Linux的栈默认有8M,可修改大小。
内存有:
栈的特点:(运行内存)短暂储存代码、数据、变量,先进先出,局部空间,自动申请,自动释放
堆的特点:大,用以放资源文件(图画,声音......)手动申请,手动释放
字符常量区:放字符串常量
全局区:储存全局变量
代码区:储存代码
程序=代码+数据;
递归循环:直接递归-----调用自己,陷入循环,直到栈区被压满。
间接递归-----调用另一个函数,另一个函数调用自己。
在效率上:正常循环>递归循环
递归实现循环的方式:先递推,再回归
递推:找重复关系
回归:返回 return
递归循环逻辑:如果结束,返回结束的值,如果没结束,返回函数。