头文件:#include<memory.h>
或者直接上万能头文件:#include<bits/stdc++.h> (才发现头文件居然还可以开外挂,以后再也不怕不怕啦,牛掰啊 ~)
But,不要高兴的太早哦,
memset初始化int型数组的时候只支持将数组中的所有元素初始化为0或-1~
上测试代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
int e[10][10];
//数组初始化全部元素为-1
cout<<"数组初始化全部元素为-1: "<<endl;
memset(e,-1,sizeof(e));
for(int i=0;i<10;i++){
for(int j=0;j<10;j++)
cout<<e[i][j]<<" ";
cout<<endl;
}
//数组初始化全部元素为 0
//或者最简单的方式,在定义数组时 ---> int e[10][10]={0};
cout<<"数组初始化全部元素为0: "<<endl;
memset(e,0,sizeof(e));
for(int i=0;i<10;i++){
for(int j=0;j<10;j++)
cout<<e[i][j]<<" ";
cout<<endl;
}
return 0;
}
结果:
如果执行memset(e,1,sizeof(e));呢?(千万不要做这样的傻事!!!)
以身试错就是我:
好了,测试部分结束,我们要分析一下,为什么会出现这样的情况,怎么0、-1可以被初始化,1就不行了呢?
百度百科中的memset:
void *memset(void *s, int ch, size_t n);
将s所指向的某一块内存中的前n个字节的内容全部设置为ch指定的ASCII值,块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作,其返回值为指向S的指针。memset是依靠二进制进行初始化,int是4个字节,memset把每个字节都赋值,也就是说,比如
因为计算机中用二进制补码表示数字,0和二进制补码为全0,-1的二进制补码为全1! 0,补码是00000000 00000000 00000000 00000000结果是0 -1,补码是11111111 11111111 11111111 11111111结果也是-1
所以对于0、-1可以被初始化,仅仅是个美丽的巧合~
但是 memset() 可以初始化一个 bool数组 memset(b,true或false,sizeof(b));//b是个bool数组