A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© doudou33420 中级黑马   /  2014-11-7 10:21  /  3622 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

9 个回复

倒序浏览
没有理解清楚楼主的意思
若在一个.c文件中定义了static 类型的变量时,在其他文件中是无法访问此变量的。(C语言)
你可以再两个文件中同时定义变量名称相同的static变量
例如在a.c 与 b.c中都有定义
static int test;
但是两个test变量在内存中是不同地址的,在一个文件中修改是不会影响到另一个变量的
回复 使用道具 举报
本帖最后由 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
回复 使用道具 举报
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 是优先类加载的
回复 使用道具 举报
qwdf00 发表于 2014-11-7 10:43
没有理解清楚楼主的意思
若在一个.c文件中定义了static 类型的变量时,在其他文件中是无法访问此变量的。( ...

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

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

感觉这样理解不是很靠谱
不过我也确实不知道怎么理解
回复 使用道具 举报
doudou33420 发表于 2014-11-7 14:39
static int _age
#import

头文件中是写声明的,可不可以这么理解,用#import一包含,就包含了所有内容,就相当于你写在main函数中了,如果你写在.m文件中再包含头文件就没事了呗.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马