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