函数:一系列语句的组合,这些语句组合起来,并被指定一个名字;包含:函数名,返回值,形参,函数体
多函数执行的模式下,整个函数的执行时间被分成多个段,每段分给一个函数
任何两个时间段不能相互重叠并且所有时间段必须相连
如歌函数A把自己的时间分配给了函数B,则函数B结束之后必须把后面的时间还给函数A
如果函数A把自己的时间分配给函数B使用,则他们之间存在函数调用关系
这个关系中函数A叫做调用函数,函数B叫做被调用函数
函数不能返回数组,除此之外没有其他限制
变量不可以跨函数使用;不同的函数里可以申明重名变量
如果函数多次执行,则每次变量对应的存储区可能不同
volatile:声明的变量存储区可以在多个程序中使用
函数调用过程中通常伴随着两个函数之间哦数据传递;传递存在两个完全相反的方向,可以从调用函数传递个被调用函数,也可以从被调用函数传递给调用函数
用于实现数据传递的存储区必须有被调用函数提供(无论哪个方向)
被调用函数只能向调用函数传递一个数字;这个数字叫做被调用函数的返回值
被调用函数必须把存放返回值的存储区类型名称写在函数名称前
被调用函数里面使用return关键字指定返回值的数字
形参和实参:有参数的函数在定义时使用的参数叫形参,当调用此函数的时候,需要传入的参数叫做实参;实参传递给形参时,相当于把实参赋值给形参。从栈内存的角度看,实参属于main()函数(调用者)的栈区,形参属于自定义函数(被调用者)的栈区
当形参是数组时,不能直接传递一个参数,而是采用两个参数传递,第一个参数是不知定长度的数组,第二个参数是数组的长度
如果被调用函数的参数为空,则表示形参的个数和类型是任意的
数组形式参数里包含的存储区不是被调用函数提供的
数组形势参数可以让被调用函数使用其他函数的存储区
调用函数和被调用函数都可以使用数组形式参数中包含的存储区
利用数值形式参数可以实现双向数据传递,这种参数叫做输入输出参数
数组形式参数声明中可以省略存储区的个数 比如:int arr[5] == int arr[]
数组作为形势参数的时候需要另外提供一个整数类型形式参数,用来表示数组里包含的存储区个数
形式参数的个数可以不固定,这种参数叫做变长参数;函数中必须使用特殊方法才能得到变长参数的内容
函数大括号前面的部分叫做函数声明,可以单独作为一条语句存在;这个时候可以省略形式参数名称
把函数声明语句写在文件开头叫做函数的显式声明;显式声明可以避免隐式声明带来的问题
********************************************************
如果一个问题可以分解成几个小问题,其中至少一个小问题和原来的问题本质上一样;这种问题就可以采用递归函数解决
采用递归函数解决问题的思路叫做递归
采用循环解决同样问题的思路叫做递推
*** 什么时候会用递归函数?***
可以找到其中执行的规律,但是却无法想明白!
比如:求 1~5 的求和;即 1+2+3+4+5
sum(5) = sum(4) + 5;
sum(4) = sum(5) + 4;
......
可以找到其中的规律:sum(a) = sum(a - 1) + a