memset()函数:为新申请的内存进行初始化工作,对内存空间进行直接处理。作用是在一段内存块中填充某个给定的值,由于只能填充一个值,所以该函数的初始化为原始初始化且无法将函数初始化为需要的程序需要的值,需要在后面程序在内存中放入需要的数据。
函数的形式为:
#include<string.h>
void *memset(void *str,int c,unsigned long n);
str – 指向要填充的内存块。
c – 要被设置的值。该值以 int 形式传递,但是函数在填充内存块时是使用该值的无符号字符形式。
n – 要被设置为该值的字节数。
memset()函数通常使用“0”初始化内存单元,通常给数组或者结构体进行初始化。函数的功能是:将指针变量所指的前n个字节的内存单元用一个整数“c”替换掉,c是int类型。s是void*型指针变量,可以为任何类型的数据进行初始化。n通常由sizeof()函数得到。
注意:如果是对指针变量所指向的内存单元进行清零初始化,那一定要先对这个指针进行初始化,先让它指向某个有效的地址。在使用memset给指针变量如pi所指向的内存单元进行初始化时,n不可写成sizeof§,因为任何时候sizeof§都等于4。
memset()函数的源代码
void *memset(void *dest, int c, size_t count)//将指针变量 s 所指向的前 n 字节的内存单元用一个“整数” c 替换,注意 c 是 int 型。s 是 void* 型的指针变量,所以它可以为任何类型的数据进行初始化。
{
const unsigned char uc = c; //unsigned char占1字节,意味着只截取c的后八位
unsigned char *su;
for(su = dest;0 < count;++su,--count)
*su = uc;
return dest;
}
综上:变量类型的本质只是标志从某一内存地址开始读取的位数,强制转换就是改变读取位数的大小。memset()可以用在字符数组的初始化以及类似于memset(arr,0,n*sizeof(int));的情况,效率比手动赋值要高的多。