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。