黑马程序员技术交流社区

标题: 求教, static修饰类中变量的问题 [打印本页]

作者: doudou33420    时间: 2014-11-7 10:21
标题: 求教, static修饰类中变量的问题
查了资料 关于static修饰成员变量的概念是:
"内部成员变量 作用域为当前定义的文件所有位置都可访问"
当使用#import 这个定义了static成员变量的类时
却可以直接访问这个静态成员变量.  
例: person类 定义static int XXX
main  import person.h  
结果main 可以直接访问age 并赋值.
请问main是static当前定义的文件么?

作者: qwdf00    时间: 2014-11-7 10:43
没有理解清楚楼主的意思
若在一个.c文件中定义了static 类型的变量时,在其他文件中是无法访问此变量的。(C语言)
你可以再两个文件中同时定义变量名称相同的static变量
例如在a.c 与 b.c中都有定义
static int test;
但是两个test变量在内存中是不同地址的,在一个文件中修改是不会影响到另一个变量的
作者: lanwen963    时间: 2014-11-7 11:33
本帖最后由 lanwen963 于 2014-11-7 11:38 编辑

请问是在Person.h中这样定义吗?

#import <Foundation/Foundation.h>

@interface Person : NSObject
{
     static int _age;
}

@end
我这会报错的:Type name does not allow storage class to be specified

作者: doudou33420    时间: 2014-11-7 14:39
lanwen963 发表于 2014-11-7 11:33
请问是在Person.h中这样定义吗?
#import
@interface Person : NSObject{     static int _age;}

static int _age
#import <Foundation/Foundation.h>

@interface Person : NSObject
{

}

这样定义, 不会报错,, 你无法在属性里定义他, 因为那块区域是随着对象存在而存在的,  (也就是通过类是无法访问的, 再进一步说, 类还没产生时  static 会先在内存存在,) static 是优先类加载的
作者: doudou33420    时间: 2014-11-7 14:41
qwdf00 发表于 2014-11-7 10:43
没有理解清楚楼主的意思
若在一个.c文件中定义了static 类型的变量时,在其他文件中是无法访问此变量的。( ...

恩 你是没理解
我的意思是 在一个类中定义了static 全局变量
但在main函数中 只要我#import了这个类
我就可以直接调用哪个static变量 你可以测试下
我想问的就是为什么可以这样而不报错
作者: wanglei123    时间: 2014-11-7 15:44
都是高手啊、、、
作者: weizhang00    时间: 2014-11-7 18:49
原因大概是这样首先头文件是预加载,main函数生成时,头文件肯定也生成了,而全局stactic则是加载头文件就已经运行了,实际上就和你写在main文件里是一样的,我是这么理解的
作者: doudou33420    时间: 2014-11-8 00:09
weizhang00 发表于 2014-11-7 18:49
原因大概是这样首先头文件是预加载,main函数生成时,头文件肯定也生成了,而全局stactic则是加载头文件就 ...

感觉这样理解不是很靠谱
不过我也确实不知道怎么理解
作者: doudou33420    时间: 2014-11-8 00:34
weizhang00 发表于 2014-11-7 18:49
原因大概是这样首先头文件是预加载,main函数生成时,头文件肯定也生成了,而全局stactic则是加载头文件就 ...

感觉这样理解不是很靠谱
不过我也确实不知道怎么理解
作者: lanwen963    时间: 2014-11-8 09:30
doudou33420 发表于 2014-11-7 14:39
static int _age
#import

头文件中是写声明的,可不可以这么理解,用#import一包含,就包含了所有内容,就相当于你写在main函数中了,如果你写在.m文件中再包含头文件就没事了呗.




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2