转载:http://www.cnblogs.com/zjp8023/archive/2008/12/28/c01.html

一般的数组初始化,也就是申请数组的时候我们就初始化,

1.char buffer[1000] = {0}; //一般的话,我们只将数组初始化为0,然后再使用.

C++中,编译器会把第一个初始化值赋给数组的第一个元素,然后用0赋值给其余的元素.

2.char buffer[] = {1,2,3,4,5,6}; 数组会自动计数,我们不用指定数字,以免画蛇添足反而出错。

3.char buffer[1000];  memset(buffer,10,sizeof(buffer)),对于有特殊需要的我们可以这样将数组中的值全部初始化为1个值,没必要用for循环,效率不高。

但是char buffer[1000]; memset (buffer,0,sizeof(buffer)) ,个人觉得这有点多此一举.

 

一、将数组所有元素初始化为0

1. 大括号形式
char a[4] = {0};
long c[4] = {0};

2. 字符串形式
char b[4] = "";

说明:
1)上面两种形式实际上都只是将数组的第一个元素置零了,但由于未初始化为0的元素系统会自动初始化为0,所以产生的效果是所以元素都被置零了。但大家不 要误认为{n}的作用是初始化数组的所有元素值为n。需要强调的是,程序员至少必须把数组元素的第一个数组元素初始化为0或者其他数值,才能使剩余的元素自动初始化为 0。也就是说,定义数组后必须要初始化,不要认为不初始化,系统就会自动初始化为0。实际上,把数组初始化为0是在编译时完成的。如果不初始化,那么各数 组元素的值将是随机数。
2)允许以字符串的形式初始化数组,所以,{0}和""的效果是一样的。而且,有时为了表示里面存的是字符串,使用""更醒目。

二、将数组所有元素初始化为 “非0”

1. for循环

char i = 0;
char a[4];
long b[4];

for (i = 0; i < 4; i++)
{
    a[i] = 1;
    b[i] = 1;
}

结果:

值的情况:
a[0] = a[1] = a[2] = a[3] = 0x01;
b[0] = b[1] = b[2] = b[3] = 0x01;

内存情况(每行八个字节,值为十六进制表示):
a:01 01 01 01
b:00 00 00 01 00 00 00 01
   00 00 00 01 00 00 00 01

2. memset

char a[4];
long b[4];

memset (a, 1, sizeof (a));
memset (b, 1, sizeof (b));

结果:

值的情况:
a[0] = a[1] = a[2] = a[3] = 0x01;
b[0] = b[1] = b[2] = b[3] = 0x01010101;

内存情况(每行八个字节,值为十六进制表示):
a:01 01 01 01
b:01 01 01 01 01 01 01 01 
   01 01 01 01 01 01 01 01 

说明:
1)for循环和memset的只在char型数组时效果相同,其余情况效果不同,请认真区分二者的区别。
2)对于非char型数组,使用memset时一定要小心,它是按字节进行赋值的,如果你是想将非char型数组的每个元素置为定值,而不是将内存每8位置为定量,最好使用for循环而不是memset。