参考链接:C/C++数组初始化的一些误区
1. 很容易出现的误区:
int a[5] = { 0 }; // 全部初始化为0
int a[5] = { 1 }; // 我想全部初始化为1
上面初始化 1 的作法将会产生错误,而且你很可能想当然这么以为,从而导致耗费时间。如果真正理解数据初始化的原则,就不会犯错了。数组初始化列表中的元素个数小于指定的数组长度时,不足的元素补以默认值。
对于基本类型int来说,当然就是补int()即0了。再看一下非基本类型的数组:
string a[5] = { "foo" };
等价于
string a[5] = { "foo", "", "", "", "" };
即后面4个元素调用了string的默认构造函数进行的初始化,而第一个则调用的string::string(const char*)进行的初始化。
2. memset 的误区
注意:memset的使用有个大问题,就是它只对char类型的数组管用,因为memset的内部实现是以字节为单位进行赋值的,如果对int 类型(4个字节),数组内存连续,结果会如下
// 成功 char a[10]; memset(a, 1, 10); // 将每个元素设置为1 // 异常值 int a[10]; int a[10]; memset(a, 1, 10*sizeof(int)); for(int i = 0; i < 10; i++) cout << a[i] << endl; // 都被赋值为16843009,十六进制表示为0x01010101
参考链接:
6.14 — Pointers to pointers and dynamic multidimensional arrays
1. 一维数组
2. 二维数组
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。