金庆的专栏

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  423 随笔 :: 0 文章 :: 454 评论 :: 0 Trackbacks

一直以为数组初始化应该用memset():

char a[128];
memset(a, 0, sizeof(a));

以为部分初始化仅仅是初始化数组头部元素:
char a[128] = {0};

今有同事纠正,“= {0}”表示全部置0.
经试验,果然可以这样全部置0.
反汇编码中可以看到memset()的调用。

如果没有任何初始化,内容是未初始化的。
只要有部分初始化,数组的剩余部分会自动初始化为0.

规则详见:
http://www.c-faq.com/decl/initval.html

When an automatic array or structure has a partial initializer,
the remainder is initialized to 0, just as for statics.

其中的脚注中又说,K&R2的早期版本中,对部分初始化的说明是错误的。

Early printings of K&R2 incorrectly stated that partially-initialized
automatic aggregates were filled out with garbage.

(金庆的专栏)


posted on 2010-09-09 00:27 金庆 阅读(696) 评论(0)  编辑 收藏 引用 所属分类: 1. C/C++

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理