一.函数简介
memset按照字节数对内存块进行初始化,引用头文件#include<string.h>
函数声明:
void * memset ( void * ptr, int value, size_t num );
ptr:初始化的空间
value:要被初始化的值
num:字节
返回值:无符号指针类型
二.注意事项
memset按照字节数对内存块进行初始化时,不能所以不能用它将int数组出初始化为0和-1之外的其他值
例如:
1. #include<stdio.h> 2. #include<string.h> 3. int main() 4. { 5. int arr[10]={0}; 6. memset(arr,1,4); 7. for(int i=0;i<10;i++) 8. { 9. printf("%d\n",arr[i]); 10. } 11. return 0; 12. }
看到arr[0]并没有被赋值为1,以下解释
memset函数只能取value的后八位赋值给每个字节,数组arr是整形,整形占有4个字节,而memset函数还是按照字节为单位进行赋值,将1(00000001)赋给每一个字节。所以arr[0]值为(00000001 00000001 00000001 00000001),十进制就是16843009。
字符类型初始化事例:
1. #include<stdio.h> 2. #include<string.h> 3. int main() 4. { 5. char arr[10]={0}; 6. memset(arr,'a',10*sizeof(char));//是将每个字节都设置成1 7. for(int i=0;i<10;i++) 8. { 9. printf("%c\n",arr[i]); 10. } 11. return 0; 12. }
总结:
memset使用起来比较方便,但也有不足,在对整形初始化时除了初始化为0和-1不能初始化成其他值,我们也可以用循环去完成这些初始化,相对于结构来说的话,memset更加简洁