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。