有很大區(qū)別。根據(jù)以前的編程經(jīng)驗(yàn),要點(diǎn)有三點(diǎn):一是空間分配的連續(xù)性;二是動態(tài)內(nèi)存申請;三是防止程序執(zhí)行中出現(xiàn)異常錯誤。
以下分別說明。
直接定義變量與malloc定義變量的編程含義;malloc事先分配好了內(nèi)存空間。
在c語言中,malloc函數(shù)原型為void*malloc(unsignedintslong),其作用是在內(nèi)存的動態(tài)存儲區(qū)中分配一個長度為slong的連續(xù)空間。此函數(shù)的返回值是分配區(qū)域的起始地址,如:
char*p;
p=malloc(64000);//空間不夠指針為null。
如果用數(shù)組定義:
charp[64000],表示的是聲明了一個數(shù)組,此數(shù)組的大小64000個字節(jié)。
但是,請注意要點(diǎn):
系統(tǒng)這時(shí)并沒有為其分配內(nèi)存。只是在使用時(shí)才分配。
動態(tài)內(nèi)存申請與釋放,確保內(nèi)存的正確使用。
比如,我們在控制系統(tǒng)中,經(jīng)常要對用戶輸入的一段零件程序、一個圖象文件進(jìn)行解釋、識別,那么首先要做的,是將此文件裝入內(nèi)存中,執(zhí)行完成后,立即釋放。這就需要malloc及free了。延用上面的定義:
fread(p,64000,1,fp);
fclose(fp);
free(p);
要點(diǎn)是隨時(shí)申請,用完釋放。
如果不用malloc,直接定義,在大型軟件開發(fā)中,一般會導(dǎo)致程序執(zhí)行異常,出現(xiàn)不可控的結(jié)果。
在前兩點(diǎn),都用到charp[64000]及malloc(64000)。
很多初學(xué)者,為了省事,喜歡用charp[64000]這樣的定義。這樣最容易出現(xiàn)bug,尤其是當(dāng)p指針越大時(shí),出現(xiàn)問題幾率越大。
這是因?yàn)椋瑢τ趐[64000]這種寫法,如果系統(tǒng)沒有足夠多的內(nèi)存使用,那么p[lp]所指向的,可能就是一個其它變量了,或者說p[lp]把其它變量空間覆蓋了。
在VC、VS中,情況要稍好,因?yàn)楣芾淼膬?nèi)存足夠大。