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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© D调的沉默 中级黑马   /  2014-4-22 09:35  /  1202 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 D调的沉默 于 2014-4-22 17:38 编辑

  对于一个结构体
  1. struct Date
  2. {
  3. int year;
  4. int month;
  5. int day
  6. };
  7. struct Date date={2009,12,8};

复制代码

为什么只能在定义的时候初始化,如果只这样
  1. struct Date date;
  2. date={2009,12,8};
复制代码

为什么不行,除了struct一旦初始化不能重新直接赋值,还有哪些数据类型和这一样的啊,总是搞混淆的

评分

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

查看全部评分

7 个回复

倒序浏览
可以重新赋值 要这样写
data.year=2009;
data.month=12;
data.day=8;
这就像数组一样
可以这样写    int a[3]={2009,12,8};
不能这样写   int a[3];
                  a[3]={2009,12,8};

评分

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

查看全部评分

回复 使用道具 举报
  1. struct Date date;
  2. date={2009,12,8};
复制代码

这里date返回的是结构体的内存地址,所以不能这样赋值,只能在定义的时候赋值。
回复 使用道具 举报
感觉是不是像OC数组一样,如果初始值为nil的话,不分配内存, 所以必须初始化时赋值
回复 使用道具 举报
blz01003hm 发表于 2014-4-22 09:56
可以重新赋值 要这样写
data.year=2009;
data.month=12;

我知道可以这样,不可以那样,我是想知道为什么可以这样,为什么不可以那样而已:(
回复 使用道具 举报
Dmajor 发表于 2014-4-22 11:26
这里date返回的是结构体的内存地址,所以不能这样赋值,只能在定义的时候赋值。 ...

恩,你这么说,我感觉是对的,但是为什么在定义的时候就可以赋值了呢,那时候它不代表地址吗?其它的类似的情况还有哪些?我感觉好多都这样不行啊
回复 使用道具 举报
D调的沉默 发表于 2014-4-22 13:53
我知道可以这样,不可以那样,我是想知道为什么可以这样,为什么不可以那样而已 ...

我想这就跟编译器有关了  这些语法规则都是人定的
回复 使用道具 举报
愿我能 发表于 2014-4-22 12:26
感觉是不是像OC数组一样,如果初始值为nil的话,不分配内存, 所以必须初始化时赋值 ...

我记得oc有一个东西是这样的,如NSarry,如果你不在创建的时候初始化,它就永远只能是个空的NSarry对象。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马