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。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM