memset()函数需要注意的问题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
memset()函数需要注意的问题
1.使⽤memset( )函数要带上头⽂件<cstirng>
2.看下⾯⼏个例⼦:
例⼀:
cin>>m;
int **p;
p=new int*p[m];
for(int i=0;i<m;i++)
{
p[i]=new int[m];
*1: memset(p,0,sizeof(p[i]));
*2: memset(p,0,m);
*3: memset(p,0,sizeof(int)*m);
}
例⼆:
cin>>m;
int p[m];
*1: memset(p,0,sizeof(p));
*2: memset(p,0,m);
*3: memset(p,0,sizeof(int)*m);
例三:
cin>>m;
int *p;
p=new int[m];
*1: memset(p,0,sizeof(p));
*2: memset(p,0,m);
*3: memset(p,0,sizeof(int)*m);
例⼀中三种memset()初始化⽅法中只有*3:是对的,*1:错在p[i]是指针,sizeof()计算的是指针长度⽽不是数组长度;*2:错在memset()函数第三项数据的单位是字节,申请m个int型数据有m*4个字节,应写成改写m*4。
例⼆中三种memset()初始化⽅法中只有*2:是错的,*1:和上⾯不同这⾥是直接定了数组,⽽不是先声明指针,在动态分配空间,所以sizeof()计算的就是数组的字节数。
例三中三种memset()初始化⽅法中只有*3:是对的,*1:,*2:在上⾯两个都讲了,对⽐着看⼀下。
3.⼩结
memset()的⼏点说明:括号⾥的第三项是字节,当时数组时可以⽤sizeof()直接计算,计算出的是数组的总字节数,当定义指针,⽤指针⽣成数组,不可⽤sizeof(),这时计算的是⼀个指针的字节数,并⾮数组字节数,可以
先计算类型字节数乘以申请的数量,⽐如若申请长度为10的数组,第三项不可以直接写10,应写成40,因为这⼀项代表字节,⼗个数乘以整型字节数四即:10*4=40,应写成40;⼀般memset()函数第⼆项为0,-1(也可初始化为⽆穷⼤,如63)不能是1。