一、static的作用:
1、修饰局部变量:让局部变量只创建一次,局部变量在程序中只有一份内存!并不会改变变量的作用域
例如:
1 void test() 2 { 3 int a = 0; 4 a++; 5 NSLog(@"a = %d",a); 6 } 7 8 int main(int argc, const char * argv[]) { 9 @autoreleasepool { 10 for (int i=0; i<3; i++) { 11 test(); 12 } 13 } 14 return 0; 15 }
打印结果为:
1 2016-07-08 20:47:02.315 static、copy和extern的基本使用[11489:914128] a = 1 2 3 2016-07-08 20:47:02.316 static、copy和extern的基本使用[11489:914128] a = 1 4 5 2016-07-08 20:47:02.316 static、copy和extern的基本使用[11489:914128] a = 1
如果把int a = 0改为static int a = 0则结果为:
1 2016-07-08 20:48:19.988 static、copy和extern的基本使用[11502:915143] a = 1 2 2016-07-08 20:48:19.988 static、copy和extern的基本使用[11502:915143] a = 2 3 2016-07-08 20:48:19.989 static、copy和extern的基本使用[11502:915143] a = 3
2、修饰全局变量。作用域减小到当前文件夹,其它文件无法访问和修改
二、extern的作用:
1、默认情况下所有文件的变量都可以访问,只需要在定义变量时添加一个extern(extern int age)(而且没有分配内存)引用一下就行,这个不管int age是定义在哪个文件中,都可以得到,而且此变量还可以被修改。
2、extern引用的时候,优先找本文件夹,如果找不到再去其它文件夹。