免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: googleboy
打印 上一主题 下一主题

[问询]Array[8]={0};的问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2007-01-11 09:14 |只看该作者

回答楼上!

声明时会初始化

在程序中就是赋值了。

声明时语言提供的便利功能,没什么可。。。的

论坛徽章:
0
12 [报告]
发表于 2007-01-11 13:18 |只看该作者
>> char Array[8]={0};
>> 是给整个数组全部赋值为0,还是仅对第一个赋值为0?

首先澄清一个概念:上面不是进行赋值操作,是进行初始化。赋值和初始化是不同的(下面还会看到这一点)。

在定义数组对象的时候,作为一个整体,数组对象要么不被初始化,要么被初始化,不存一部分元素被初始化而另一部分元素没有初始化的情况。

在用户为数组指定初始化值的时候,不必为所有的数组元素提供初始化值,可以只提供前面 n 个元素的值(n>=0),其余的元素将被初始化为 0。

因此,char Array[8]={0}; 的含义是第一个元素按照用户指定的值(0)进行初始化,其余的被初始化为 0。其结果就是整个数组被初始化为 0。char Array[8]={}; 是没有提供任何初始化值,但是指定了数组初始化的情况,其结果和 char Array[8]={0}; 是等同的。

>> 但是 a[4] = {1}; 这个倒不是把所有的数组元素赋值为1,只有第一个

a[4] = {1}; 是赋值操作,但却是非法的表达式,因为 {} 不是运算符。这里是混淆了赋值和初始化的概念。

int a[4] = {1}; 才是对数组进行初始化。其结果是:a[0] 被初始化为 1, a[1]、a[2]、a[3] 都被初始化为 0。

>> char Array[12][8] = {0};
>> 为何GCC会出警告?

应该清楚的是:char Array[12][8] = {0}; 这样的定义数组对象并进行初始化是合法的。GCC 对此发出警告是因为你在编译中使用了 -Wmissing-braces(-Wall 中包含这个警告)参数。产生这个警告并不说明程序是错误的,但是你要注意提供的初始化值和元素的对应关系是否正确。

要避免这个警告,不妨这样对数组初始化:char Array[12][8] = {};

论坛徽章:
0
13 [报告]
发表于 2007-01-11 13:28 |只看该作者
原帖由 langue 于 2007-1-10 18:55 发表


char Array[12][8] = {{0}};


这样也不是对所有数组元素初始化一个特定值的方式

论坛徽章:
4
CU大牛徽章
日期:2013-03-13 15:29:07CU大牛徽章
日期:2013-03-13 15:29:49CU大牛徽章
日期:2013-03-13 15:30:192015亚冠之广州恒大
日期:2015-07-22 17:20:15
14 [报告]
发表于 2007-01-11 13:28 |只看该作者
全部为0 这个是c99的 方法
可能gcc不支持

论坛徽章:
4
CU大牛徽章
日期:2013-03-13 15:29:07CU大牛徽章
日期:2013-03-13 15:29:49CU大牛徽章
日期:2013-03-13 15:30:192015亚冠之广州恒大
日期:2015-07-22 17:20:15
15 [报告]
发表于 2007-01-11 13:36 |只看该作者
char p[256] = {p[255]=0};
这个是对对指定元素初始化 c99方法

[ 本帖最后由 ghostwwl 于 2007-1-11 13:55 编辑 ]

论坛徽章:
0
16 [报告]
发表于 2007-01-11 13:52 |只看该作者
原帖由 ghostwwl 于 2007-1-11 13:36 发表
char p[256] = {p[256]=0};
这个是对对指定元素初始化 c99方法


这个溢出,呵呵

论坛徽章:
4
CU大牛徽章
日期:2013-03-13 15:29:07CU大牛徽章
日期:2013-03-13 15:29:49CU大牛徽章
日期:2013-03-13 15:30:192015亚冠之广州恒大
日期:2015-07-22 17:20:15
17 [报告]
发表于 2007-01-11 13:55 |只看该作者
楼上说得 对哦 应该是 <256的 任意一个

论坛徽章:
0
18 [报告]
发表于 2007-01-11 15:00 |只看该作者
原帖由 mu_mu8309 于 2007-1-10 18:07 发表

仅对第一个赋值吧??

兄弟,,不好意思....是整个数组!

论坛徽章:
0
19 [报告]
发表于 2007-01-12 12:35 |只看该作者
全部赋值为0

论坛徽章:
0
20 [报告]
发表于 2007-01-12 12:48 |只看该作者
a[4] = {1};它将数组中第一个元素赋值为1,由于剩下的元素没赋值,会默认赋值为0,a[4]={0}是一样的道理。
a[n][n]={1},在suse中会给出warnnig.
a[n][n]={{1}}是正确的,原因如上。

评分

参与人数 1可用积分 +3 收起 理由
langue + 3

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP