作用域(Scope):
变量的有效范围
存储类别:
静态存储方式:是指在程序运行期间分配固定的存储空间的方式。
动态存储方式:是在程序运行期间根据需要进行动态的分配存储空间的方式。
局部变量
定义在函数内部的变量称为局部变量(Local Variable)
作用域:
它的作用域仅限于函数内部,离开该函数后就是无效的,再使用就会报错
几点说明:
1) 形参变量、在函数体内定义的变量都是局部变量。实参给形参传值的过程也就是给局部变量赋值的过程。
2) 可以在不同的函数中使用相同的变量名,它们表示不同的数据,分配不同的内存,互不干扰,也不会发生混淆。
3) 在语句块中也可定义变量,它的作用域只限于当前语句块。
存储:
函数形式参数、自动变量(未加static声明的局部变量)、函数调用实的现场保护和返回地址等数据,在函数开始调用时分配动态存储空间,函数结束时释放这些空间。对自动变量来说,如果不赋初值则它的值是一个不确定的值。
静态局部变量属于静态存储类别,在静态存储区内分配存储单元。在程序整个运行期间都不释放。静态局部变量在编译时赋初值,如果在定义局部变量时不赋初值的话,编译时自动赋初值0(对数值型变量)或空字符(对字符变量)。
全局变量
在所有函数外部定义的变量称为全局变量(Global Variable)
作用域:
全局变量的作用域默认是整个程序。OC中,如果全局静态变量在.h中声明,则作用域是整个程序,如果在.m中声明,则其作用域只在该类中。
存储:
全局变量全部存放在静态存储区,在程序开始执行时给全局变量分配存储区,程序行完毕就释放。在程序执行过程中它们占据固定的存储单元,而不会动态地进行分配和释放;
在OC中,不能再.h文件中声明全局变量,但是可以声明全局静态变量。
当全局变量和局部变量同名时,在局部范围内全局变量被“屏蔽”,不再起作用。或者说,变量的使用遵循就近原则,如果在当前作用域中存在同名变量,就不会向更大的作用域中去寻找变量。