浅谈C++中memset函数的用法
memset函数的头文件是cstring, 实际上是一个字符串处理函数,但常用于给静态数组(不是new出来的数组)赋特定初值。
#include<cstring>
C++ Reference关于memset函数的链接页:memset - C++ Reference
在使用的时候有2点需要特别注意:
1. value虽然是以int(32 bit)类型给的,但最终是转化为了unsigned char(8 bit)
所以,可以赋的最大初值是memset(a,0x3f, sizeof(a)),相当于赋了1061109567,
memset(a, 0xff, sizeof(a))相当于赋-1,memset(a, 0, sizeof(a))相当于赋0,而想要赋初值1是没法实现的
memset(a,0x3f,sizeof(a)); // 1061109567,1061109567,1061109567,1061109567,1061109567
memset(a, 1, sizeof(a)); // 16843009,16843009,16843009,16843009,16843009
2. 动态开辟(new)出来的数组的头指针(p)经过sizeof运算后得到只是头指针的大小而不是整个数组的大小,所以动态开辟的数组不能用memset赋初值,如果要赋初值0的话,直接new的时候后面添一个()就行了。
int* p = new int[5](); // 0,0,0,0,0
memset(p, 1, sizeof(p)); // 16843009,0,0,0,0
delete[] p;