前段时间学习了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 }

 

posted on 2017-03-24 18:00  Daniel_z  阅读(393)  评论(0编辑  收藏  举报