前段时间学习了malloc函数和calloc函数,两个函数最大的区别就是malloc在申请完空间之后并不会对其进行初始化,那么就没有手动初始化的方法了么?接下来就学习一下memset函数
memset函数:
- 函数原型:void* memset(void *s , int ch , size_t n);
- 函数说明:将指针s所指向的内存空间的前n个字节的内容全部设置为ch指定的ASCII码,s为需要被初始化的内存地址,块的大小由第三个参数指定,该函数通常为新申请的内存做初始化工作
- 返回值:返回值为指向s的指针
- 头文件:<string.h>或者<memory.h>
- 一般应用:
- 通常用来对一块已经分配地址的内存进行初始化,并且通常初始化为0或者字符'\0',举例说明
1 //1,对字符数组进行初始化 2 int main(){ 3 char buf[10];//创建一个字符数组 4 memset(buf,'0',sizeof(char)*10);//将buf指向的空间的前10个字节初始化为字符'\0' 5 for(int i = 0;i < 10;i++){ 6 cout << buf[i] << endl; 7 } 8 cout << endl; 9 return 0; 10 } 11 //结果应该是10个0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0
- 对使用malloc函数申请的内存空间进行初始化
1 int main(){ 2 char *ptr = (char*) malloc(sizeof(char)*10); 3 if(ptr != NULL){ 4 memset(ptr,'0',sizeof(char)*10); 5 for(int i=0;i<10;i++){ 6 cout << ptr[i] << endl; 7 } 8 free[ptr]; 9 ptr = NULL; 10 11 return 0; 12 }//结果和上面的一样,是10个0
- 对整型数组进行初始化
1 int main(){ 2 int in[10]; 3 memset(in,0,sizeof(int)*10); 4 for(int i=0;i<10;i++){ 5 cout << in[i] << endl; 6 } 7 return 0; 8 }