黑马程序员技术交流社区

标题: 关于初始化的问题,一直搞不明白 [打印本页]

作者: D调的沉默    时间: 2014-4-22 09:35
标题: 关于初始化的问题,一直搞不明白
本帖最后由 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一旦初始化不能重新直接赋值,还有哪些数据类型和这一样的啊,总是搞混淆的
作者: blz01003hm    时间: 2014-4-22 09:56
可以重新赋值 要这样写
data.year=2009;
data.month=12;
data.day=8;
这就像数组一样
可以这样写    int a[3]={2009,12,8};
不能这样写   int a[3];
                  a[3]={2009,12,8};

作者: Dmajor    时间: 2014-4-22 11:26
  1. struct Date date;
  2. date={2009,12,8};
复制代码

这里date返回的是结构体的内存地址,所以不能这样赋值,只能在定义的时候赋值。
作者: 愿我能    时间: 2014-4-22 12:26
感觉是不是像OC数组一样,如果初始值为nil的话,不分配内存, 所以必须初始化时赋值
作者: D调的沉默    时间: 2014-4-22 13:53
blz01003hm 发表于 2014-4-22 09:56
可以重新赋值 要这样写
data.year=2009;
data.month=12;

我知道可以这样,不可以那样,我是想知道为什么可以这样,为什么不可以那样而已:(
作者: D调的沉默    时间: 2014-4-22 13:55
Dmajor 发表于 2014-4-22 11:26
这里date返回的是结构体的内存地址,所以不能这样赋值,只能在定义的时候赋值。 ...

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

我想这就跟编译器有关了  这些语法规则都是人定的
作者: D调的沉默    时间: 2014-4-22 15:08
愿我能 发表于 2014-4-22 12:26
感觉是不是像OC数组一样,如果初始值为nil的话,不分配内存, 所以必须初始化时赋值 ...

我记得oc有一个东西是这样的,如NSarry,如果你不在创建的时候初始化,它就永远只能是个空的NSarry对象。




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