| 網(wǎng)站首頁 | 關(guān)于我們 | 開發(fā)優(yōu)勢 | 產(chǎn)品展示 |
| 合作企業(yè) | 新聞動態(tài) | 聯(lián)系我們 | 電話聯(lián)系 |
文章作者:濟(jì)南軟件開發(fā) 時間:2016年09月27日
山東軟件開發(fā)認(rèn)為,兩者都是對內(nèi)存進(jìn)行操作的函數(shù)。應(yīng)用在多維數(shù)組上時,需特別注意一下。
首先看看兩者原型。
1.malloc函數(shù),用于從堆上分配指定字節(jié)的內(nèi)存空間。
void * malloc(size_t n);
n為要求分配的內(nèi)存字節(jié)數(shù)。如果執(zhí)行成功,函數(shù)返回獲得的內(nèi)存空間的首地址;執(zhí)行失敗,返回值為NULL。
由于函數(shù)返回值值的類型為void的指針,因此,可以將void指針類型轉(zhuǎn)換后賦值給任意類型指針,這樣就可以通過操作該類型指針來操作從堆上獲得的內(nèi)存空間。
malloc函數(shù)分配得到的內(nèi)存空間是未初始化的。有時候,在使用前需要對該內(nèi)存空間進(jìn)行初始化,此時用上memset。
2.memset函數(shù)
void * memset (void * p,int c,size_t n);
指針p為所操作的內(nèi)存空間的首地址,c為每個字節(jié)所賦的值,n為所操作內(nèi)存空間的字節(jié)長度,也就是內(nèi)存被賦值為c的字節(jié)數(shù)。
注意的它是以字節(jié)為單位進(jìn)行賦值的,賦值范圍是0x00~0xFF。
在多維數(shù)組上的應(yīng)用。如二維。
double **weight; //二維數(shù)組weight[n][m]
weight=(double**)malloc(n*sizeof(double*)); //注意是sizeof里頭是double*而不是double。該維裝的是指針
int i=0;
for(;i<n;i++){
weight[i]=(double*)malloc(n*sizeof(double));
memset(weight[i],0,n*sizeof(double)); //正確。注意是對weight[i],而不是weight
}
//memset(weight,0,sizeof(n*n*sizeof(double));
//這樣的統(tǒng)一對整個二維數(shù)組初始化是錯誤的,因為該二維數(shù)組是通過分次malloc得到的,各內(nèi)存不一定連續(xù)
//但如果是直接聲明的多維數(shù)組如a[5][5],其內(nèi)存肯定是連續(xù)的,此時統(tǒng)一memset沒問題。
想要了解更多詳情歡迎來電咨詢18678812288
登陸網(wǎng)址:m.h6244.cn。
聯(lián)系人:王經(jīng)理。