C語(yǔ)言中沒(méi)有new函數(shù),但是有malloc函數(shù)

成都創(chuàng)新互聯(lián)公司基于分布式IDC數(shù)據(jù)中心構(gòu)建的平臺(tái)為眾多戶(hù)提供移動(dòng)服務(wù)器托管 四川大帶寬租用 成都機(jī)柜租用 成都服務(wù)器租用。
原型:? void *malloc(unsigned int size);
#includestdlib.h或#include malloc.h
malloc 向系統(tǒng)申請(qǐng)分配指定size個(gè)字節(jié)的內(nèi)存空間(連續(xù)的一塊內(nèi)存)。返回類(lèi)型是 void* 類(lèi)型。void* 表示未確定類(lèi)型的指針。
malloc 只管分配內(nèi)存,并不能對(duì)所得的內(nèi)存進(jìn)行初始化,所以得到的一片新內(nèi)存中,其值將是隨機(jī)的。
申請(qǐng)零字節(jié)內(nèi)存,函數(shù)并不返回NULL,而是返回一個(gè)正常的內(nèi)存地址,但是你卻無(wú)法使用這塊大小為0的內(nèi)存。
#include?stdio.h
#include?conio.h
int?main(void)
{
int?i,n;
char?*buffer;
printf("How?long?do?you?want?the?string??");
scanf("%d",i);
buffer=(char?*)malloc(i+1);
if?(buffer?==?NULL)
{
exit(1);
}
for?(n=0;ni;n++)
{
buffer[n]=rand()%26+'a';??/*generate?0-25?*/
}
buffer[i]='\0';
printf("Random?string?:%s\n",buffer);
free(buffer);
getch();
return?0;
}
c++中有new函數(shù)
new可用來(lái)生成動(dòng)態(tài)無(wú)名變量。
使用完動(dòng)態(tài)無(wú)名變量后應(yīng)該及時(shí)釋放,要用到 delete 運(yùn)算符。
int?*p=new?int?[10];?//動(dòng)態(tài)數(shù)組的大小可以是變量或常量;
new是C++中用于動(dòng)態(tài)內(nèi)存分配的運(yùn)算符,在C語(yǔ)言中一般使用malloc函數(shù)。
有三種用法:new operator、operator new、placement new
1)new operator:
new operator是最常見(jiàn)的用法,如 Emp* e1 = new Emp;(Emp是一個(gè)類(lèi)) 這里new有兩種作用:分配空間、初始化對(duì)象(調(diào)用了構(gòu)造函數(shù))
2)operator new:
operator new作用是只分配空間,不調(diào)用構(gòu)造函數(shù),如:Emp* e2 = (Emp*)operator new(sizeof(Emp));
3)placement new:
placement new作用是在已分配好的空間上初始化對(duì)象,不分配空間,調(diào)用拷貝構(gòu)造函數(shù),如:new ((void *)e2) Emp(*tb1);
必須使用malloc函數(shù),因?yàn)镃語(yǔ)言沒(méi)有new這個(gè)操作符,但是如果你的編譯器是C++的話,是可以使用new的。
所以程序就是:
long*pNumber=(long*)malloc(sizeof(long)*1000000);
開(kāi)辟后就可以像數(shù)組一樣使用它了,使用完后,一定要記得釋放它,用free,像這樣free(pNumber);使用new更方便。
代碼:
long*pNumber=newlong[1000000];
使用完后,使用delete[]
像delete[]pNumnber;
擴(kuò)展資料:
總結(jié)C++中三種關(guān)于"new"的使用方法
其一是newoperator,也叫new表達(dá)式;其二是operatornew,也叫new操作符。這兩個(gè)英文名稱(chēng)起的也太絕了,很容易搞混,那就記中文名稱(chēng)吧。new表達(dá)式比較常見(jiàn),也最常用,例如:
string*ps=newstring("abc");
上面這個(gè)new表達(dá)式完成了兩件事情:申請(qǐng)內(nèi)存和初始化對(duì)象。
new操作符類(lèi)似于C語(yǔ)言中的malloc,只是負(fù)責(zé)申請(qǐng)內(nèi)存,例如:void*buffer=operatornew(sizeof(string));
注意這里多了一個(gè)operator。這是new的第二個(gè)用法,算比較常見(jiàn)。
第三個(gè)用法不常見(jiàn),它用于在給定的內(nèi)存中初始化對(duì)象,也就是說(shuō)你手中已有一塊閑置的內(nèi)存,例如:
void*buffer=operatornew(sizeof(string));
//那么現(xiàn)在buffer是你所擁有閑置內(nèi)存的指針
buffer=new(buffer)string("abc");//調(diào)用了placementnew,在buffer所指向的內(nèi)存中初始化string類(lèi)型的對(duì)象,初始值是"abc"
事實(shí)上,placementnew也是new表達(dá)式的一種,但是比普通的new表達(dá)式多了一個(gè)參數(shù),當(dāng)然完成的操作和返回值也不同。
因此上面new的第一種用法可以分解兩個(gè)動(dòng)作,分別為后面的兩種用法。
與new對(duì)應(yīng)的delete沒(méi)有三種語(yǔ)法,它只有兩種,分別是deleteoperator和operatordelete,也稱(chēng)為delete表達(dá)式和delete操作符。delete表達(dá)式和new表達(dá)式對(duì)應(yīng),完成對(duì)象的析構(gòu)和內(nèi)存的釋放操作。而delete操作符只是用于內(nèi)存的釋放,和C語(yǔ)言中的free相似。例如:
string*ps=newstring("abc");
...
deleteps;//調(diào)用delete表達(dá)式,先析構(gòu)再釋放
void*buffer=operatornew(sizeof(string));
...
operatordelete(buffer);//釋放
placementnew是在指定位置初始化對(duì)象,也就是調(diào)用了構(gòu)造函數(shù),因此與之對(duì)應(yīng)的就是析構(gòu)函數(shù)了,只不過(guò)它不叫placementdelete而已。
void*pv=operatornew(sizeof(vectorint));
pv=new(pv)vectorint(8,0);
...
static_castvectorint*(pv)-~vector();//calldestructfunction
operatordelete(pv);//freememory
pv=NULL;
網(wǎng)頁(yè)名稱(chēng):c語(yǔ)言函數(shù)new用法 c語(yǔ)言new的用法
文章網(wǎng)址:http://chinadenli.net/article6/dojhgig.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、移動(dòng)網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站、網(wǎng)站營(yíng)銷(xiāo)、外貿(mào)建站、外貿(mào)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)