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。

原文地址:https://www.cnblogs.com/zwsmile/p/11595059.html