黑马程序员技术交流社区

标题: C语言数组定义时不初始化为什么会报错? [打印本页]

作者: 阳光地带    时间: 2014-7-19 18:00
标题: C语言数组定义时不初始化为什么会报错?
先定义int ages[5];
再一个一个赋值是可以的,但是这样赋值ages = {11,22,33,21,15};
编译器会报错呢?
为什么会报错,能详细讲下原理吗?

作者: fantacyleo    时间: 2014-7-19 18:04
大括号赋值这种语法简写形式只能用在声明同时进行初始化的场合。原因是:数组名是个指针常量,其值是数组首元素的地址,且在声明int ages[5]时就已经决定并得到赋值了。你再来个age={},就是对常量二次赋值,当然不允许
作者: 阳光地带    时间: 2014-7-19 18:20
fantacyleo 发表于 2014-7-19 18:04
大括号赋值这种语法简写形式只能用在声明同时进行初始化的场合。原因是:数组名是个指针常量,其值是数组首 ...

明白了,版主请给楼上加分!
作者: fantacyleo    时间: 2014-7-19 18:26
阳光地带 发表于 2014-7-19 18:20
明白了,版主请给楼上加分!

谢谢!我的分早够了。你的分数还要多加油。你把帖子状态改为”提问结束“,版主会给你加分的,如果24小时后还没给你加,可以到http://bbs.itheima.com/thread-118587-1-1.html 去申请加分
作者: 阳光地带    时间: 2014-7-19 21:46
fantacyleo 发表于 2014-7-19 18:26
谢谢!我的分早够了。你的分数还要多加油。你把帖子状态改为”提问结束“,版主会给你加分的,如果24小时 ...

谢谢啦!提问也可以加分的?
作者: fantacyleo    时间: 2014-7-19 23:33
阳光地带 发表于 2014-7-19 21:46
谢谢啦!提问也可以加分的?

可以啊。这是版规
作者: Melody_cw    时间: 2014-7-20 00:34
数组名就是数组的地址,和第一个首元素的地址相同,ages={11,22,33,21,15}这个操作会让你编译器认为你在操作ages[0]的内存
作者: 傘が咲く    时间: 2014-7-20 09:17
没超过1天 不用提交,看到自然加了:victory:
作者: 阳光地带    时间: 2014-7-20 11:28
傘が咲く 发表于 2014-7-20 09:17
没超过1天 不用提交,看到自然加了

好的 谢谢版主!
作者: 且行且惜    时间: 2014-7-20 11:45
ages = {11,22,33,21,15};这个是初始化数组时候的用法,比如int ages[5]= {11,22,33,21,15};,初始化以后ages就是确定的常量了,这个赋值只能在初始化的时候用!




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