在C語言中,對于一些數(shù)組的大小有時候我們并不知道需要開辟多大的一塊內(nèi)存空間,所以這時候我們就需要動態(tài)的去開辟一塊內(nèi)存空間。
在濱海等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站建設(shè)、網(wǎng)站制作 網(wǎng)站設(shè)計制作按需求定制網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計,成都全網(wǎng)營銷,外貿(mào)網(wǎng)站制作,濱海網(wǎng)站建設(shè)費用合理。C語言中動態(tài)開辟內(nèi)存的函數(shù)有malloc、calloc、realloc、釋放內(nèi)存的函數(shù)有free
C++中可以用運算符new來開辟內(nèi)存,用delete釋放內(nèi)存。
malloc:
原型:void *malloc(unsigned int num_bytes);
功能:分配長度為num_bytes字節(jié)的內(nèi)存。
返回值:如果分配成功返回指向被分配內(nèi)存的指針,失敗返回NULL。
calloc:
原型:void *calloc(size_t n, size_t size);
其功能、返回值和calloc一樣。
區(qū)別是:malloc分配的空間不初始化,calloc自動初始化為0.
realloc:
原型: void *realloc(void *mem_address, unsigned int newsize);
功能:對原來的空間進行擴大。realloc先判斷當前指針是否有連續(xù)的足夠的空間,如果有,擴大當前指針指向的空間,并將原指針返回;如果沒有,先申請一塊擴大后的空間,然后將原來的內(nèi)存中的數(shù)據(jù)拷貝到新的內(nèi)存空間,再釋放原來指針指向的空間,返回新申請空間的指針。
返回值:成功,返回一個申請的空間的指針,失敗,返回NULL。
free:
原型:void free(void *ptr);
功能:釋放由以上函數(shù)申請的內(nèi)存空間,一般和上面的函數(shù)配對使用,否則會造成野指針。
int main() { //int *p = (int*)malloc(20); int size = 5; int *p = (int*)malloc(sizeof(int)*size); int *q = (int*)calloc(size,sizeof(int)); int *p_tmp = p; int *q_tmp = q; if(p == NULL || q == NULL) { exit(1); } for(int i = 0;i<size;i++) { int n = *p_tmp; printf("%d ",n); p_tmp++; } cout<<endl; for(int i = 0;i<size;i++) { int n = *q_tmp; printf("%d ",n); q_tmp++; } int *new_p = (int*)realloc(p,sizeof(int)*10); if(new_p == NULL) { exit(1); } p = new_p; free(p); free(q); system("pause"); return 0; }
結(jié)果:
new:
功能:動態(tài)分配空間
delete:
功能:釋放空間
用法:
1)int *p = new int; delete p;
動態(tài)開辟sizeof(int)個字節(jié)。
2)int *p = new int(n); delete p;
動態(tài)開辟sizeof(int)個字節(jié),并初始化為n。如果n缺省,則初始化為0。
3)int *p = new int[10]; delete[] p;
動態(tài)開辟10*sizeof(int)個字節(jié)的內(nèi)存空間。
int main() { int *p = new int(5); int *q = new int[10]; for(int i = 0;i<10;i++) { q[i] = i; } printf("p addr:%p\n",p); printf("%d\n",*p); printf("q addr %p\n",q); for(int i = 0;i<10;i++) { printf("%d ",q[i]); } delete p; delete[] q; system("pause"); return 0; }
結(jié)果:
malloc與new的區(qū)別:
1、malloc是C/C++標準庫函數(shù),而new是C++運算符。
2、new和delete在對象創(chuàng)建和消亡時會自動執(zhí)行構(gòu)造涵數(shù)和析構(gòu)函數(shù)。而malloc則不會。對于一些非內(nèi)部數(shù)據(jù)類型來說,顯然用new和delete更合適。
3、new只能用于C++中,C程序則只能用malloc.C++程序兩者都可用。
4、new出來的指針是直接帶類型信息的,而malloc出來的指針都是void*類型的,使用時一般需要強轉(zhuǎn)。
創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務(wù)器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機房獨有T級流量清洗系統(tǒng)配攻擊溯源,準確進行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動現(xiàn)已開啟,新人活動云服務(wù)器買多久送多久。
文章名稱:內(nèi)存的動態(tài)開辟-創(chuàng)新互聯(lián)
新聞來源:http://jinyejixie.com/article28/dhdicp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、自適應(yīng)網(wǎng)站、企業(yè)建站、營銷型網(wǎng)站建設(shè)、企業(yè)網(wǎng)站制作、定制網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容