一直以为数组初始化应该用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.

(金庆的专栏)