文章目录
- 栈
- 动态数组
- 赋值
- memset
- fill
栈
数组是底层数据类型,存放在栈中,其内存的分配和释放完全由系统自动完成.
通过如下代码初始化一个全局变量
数组,初始化的规则就是不足数组大小的按默认值补位
如果不明确指出初始化列表,那么基本类型是不会被初始化的(全局变量、静态变量外); 类类型如string
则会为每个元素调用默认构造函数进行初始化。
所以建议使用如下方式初始化,局部变量也会初始化
动态数组
动态数组是通过new
创建在堆上的数组
动态数组如果不明确指出初始化列表,那么基本类型是不会被初始化的(全局变量也没有初始化,静态变量外),所有的内存都是“脏的”。
new
还有一种写法,会初始化
加了括号的意思是使用默认值初始化整个数组
赋值
memset
memset
可以为上述数组重置,由于memset
按字节对内存块进行初始化,所以不能用它将int数组初始化为0和-1之外的其他值(除非该值高字节和低字节相同)。
memset
赋值采用输入的第四个字节,因为511二进制码 (00000000 00000000 00000001 11111111),最后一个字节与1的二进制码 (11111111 11111111 11111111 11111111),四个字节都相同,所以可以赋值。
前面提过,如果我们想初始化的值高位字节和低位字节相同(0和-1的每个字节都相同),也可以用memset
赋值。
fill
fill() 和 fill_n() 算法提供了一种为元素序列填入给定值的简单方式,可以用于多种序列,这里列出初始化数组的样例,感兴趣再做探索
参考
memsetC/C++数组初始化的一些误区
C++ fill和fill_n函数用法详解