函数是一种非常好用的结构,它可以重复使用,简化代码,提高代码的效率,
1、函数调用在函数定义之后,可以直接定义函数;如果函数调用在函数定义之前,或调用的函数在另一个源文件中,就需要声明函数;
2、主函数调用函数是传递的是实参的副本,函数用形参接收实际上是对新生成的变量(形参)进行了初始化赋值,所以,形参的改变不影响实参;
3、递归函数:即调用该函数本身的函数;
递归函数就像一个循环一样,在不停的调用自己,它在某个时刻的返回值必须是确定的,就像是循环的终止条件,终止该函数。
4、调用函数时传递数组元素,视为该数组类型对应的变量,形参类型为对应类型的普通变量。如果传递的是数组名,就相当于传过去的是该数组的地址,要用指针类型变量接收;
5、外部函数:能被其他源文件调用的函数。定义时用extern标记或不加任何修饰;
内部函数(又称静态函数):只能在当前文件使用。用static修饰。
静态函数会被自动分配在一个一直使用的存储区,直到退出应用程序实例,避免了调用函数时压栈出栈,速度快很多。
调用外部函数时先声明再使用,编译多个文件。
6、全局变量:定义在函数内部,只在函数内部起作用,函数执行完自动释放。可分为形参、函数局部变量、代码块局部变量。
全局变量:在整个函数起作用,当整个程序运行完后才释放。全局变量的值可以被任意函数修改。
7、外部全局变量:可以被其他源文件使用的全局变量。使用外部全局变量时先声明后使用,形式: extern 类型 变量名;
内部全局变量:只能被当前文件使用的全局变量,前面用static修饰。
8、静态存储:在程序开始运行就分配内存空间,直到程序结束才释放。所有的全局变量和有static修饰的局部变量都是静态存储(没有指定的情况下);
动态存储:在程序运行期间根据需要分配内存空间,使用完后自动释放,可以多次分配、释放。函数形参,没有static修饰的局部变量,函数执行完的结果以及返回地址等。(没有指定的情况下)
为了指定变量存储类别,oc支持下面几种存储类别:
auto:指定变量为动态存储机制,局部变量默认为这种粗出机制;
static: 指定局部变量存放到静态存储区;
register:指定变量放到寄存器中。调用寄存器中的变量非常快,但是寄存器的个数有限,一般为1到2个;
extern:声明外部变量;
函数这一部分中,出现频率最多的貌似是static,它既可以修饰变量又可以修饰函数,感觉威力好大,其实static只有两个作用:
1、隐藏功能:static修饰的函数和全局变量只能在当前文件中使用,在其他文件中会被隐藏起来;
2、保持持久性:static修饰的静态局部变量在函数内定义,生存期为整个源程序,但作用域与自动变量相同,只能在定义该变量的函数内使用。退出该函数后, 尽管该变量还继续存在,但不能使用它。对基本类型的静态局部变量若在说明时未赋以初值,则系统自动赋予0值。而对自动变量不赋初值,则其值是不定的。