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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© .Drenched 中级黑马   /  2014-4-27 04:03  /  2083 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


为什么day的地址比year大,不应该是先分配大的内存地址给year吗,然后再month,然后再是day???

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

2 个回复

倒序浏览
全局变量分为显示初始化和未被初始化,已经初始化的是可执行的模块的一部分,而未被初始化的变量,只有当调用的时候才能执行,才能给变量分配内存空间
回复 使用道具 举报
哈哈,这个我会,终于让我找到了个问题没怎么有人回答的了。
对于内存地址是从大往小得分配的,但是对于构造体,构造体内部的成员变量是按照定义顺序,从小往大分配的。可以借鉴mj老师说数组的时候内存的地址分配。
譬如
  1. int arry[3] = {12,13,17};
  2.     for (int i=0; i<sizeof(arry)/sizeof(int); i++) {
  3.         
  4.         NSLog(@"arry[%d]=%p",i,&arry[i]);
  5.     }
复制代码

这段代码的执行结果就是2014-04-28 19:53:37.493 property和synthesizes[360:303]
arry[0]=0x7fff5fbff834
arry[1]=0x7fff5fbff838
arry[2]=0x7fff5fbff83c
但是你要是定义两个结构体,他们仍然和变量一样,内存从高地址往低地址分配。如下代码
  1.    
  2.     struct student{
  3.         int month;
  4.         int year;
  5.         int day;
  6.     };
  7.     struct student s1 = {12,15,16};
  8.     struct student s2={13,14,15};
  9.     NSLog(@"s1=%p,s2=%p",&s1,&s2);
复制代码

运行结果如下,s1=0x7fff5fbff838,s2=0x7fff5fbff828
这下该懂了吧

评分

参与人数 1技术分 +1 收起 理由
bao9107 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马