国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【C語言】動(dòng)態(tài)內(nèi)存函數(shù)介紹

這篇具有很好參考價(jià)值的文章主要介紹了【C語言】動(dòng)態(tài)內(nèi)存函數(shù)介紹。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

1.malloc和free

2.calloc

3.realloc


【C語言】動(dòng)態(tài)內(nèi)存函數(shù)介紹,C語言筆記,c語言

?文章來源地址http://www.zghlxwxcb.cn/news/detail-814656.html

1.malloc和free

C語言提供了一個(gè)動(dòng)態(tài)內(nèi)存開辟的函數(shù)malloc:

void* malloc(size_t size);

這個(gè)函數(shù)向內(nèi)存申請(qǐng)一塊連續(xù)可用的空間,并返回指向這塊空間的指針。

?如果開辟成功,則返回一個(gè)指向開辟好空間的指針。

?如果開辟失敗,則返回一個(gè)NULL指針,因此malloc的返回值一定要做檢查。

返回值的類型是 void* ,所以malloc函數(shù)并不知道開辟空間的類型,具體在使用的時(shí)候使用者自己來決定。

如果參數(shù) size 為0,malloc的行為是標(biāo)準(zhǔn)是未定義的,取決于編譯器。

C語言提供了另外一個(gè)函數(shù)free,專門是用來做動(dòng)態(tài)內(nèi)存的釋放和回收的,函數(shù)原型如下:

void free(void* ptr);

free函數(shù)用來釋放動(dòng)態(tài)開辟的內(nèi)存。

?如果參數(shù) ptr 指向的空間不是動(dòng)態(tài)開辟的,那free函數(shù)的行為是未定義的。

?如果參數(shù) ptr 是NULL指針,則函數(shù)什么事都不做。

malloc和free都聲明在 stdlib.h 頭文件中。 舉個(gè)例子:

#include <stdio.h>
#include <stdlib.h>
int main()
{
 //代碼1

 int num = 0;
 scanf("%d", &num);
 int arr[num] = {0};

 //代碼2

 int* ptr = NULL;
 ptr = (int*)malloc(num*sizeof(int));
 if(NULL != ptr)//判斷ptr指針是否為空
 {
 int i = 0;
 for(i=0; i<num; i++)
 {
 *(ptr+i) = 0;
 }
 }
 free(ptr);//釋放ptr所指向的動(dòng)態(tài)內(nèi)存
 ptr = NULL;//是否有必要?有必要,防止異常訪問
 return 0;
}

2.calloc

C語言還提供了一個(gè)函數(shù)叫 calloc , calloc 函數(shù)也用來動(dòng)態(tài)內(nèi)存分配。原型如下:

void* calloc(size_t num, size_t num);


函數(shù)的功能是為 num 個(gè)大小為 size 的元素開辟一塊空間,并且把空間的每個(gè)字節(jié)初始化為0。
與函數(shù) malloc 的區(qū)別只在于 calloc 會(huì)在返回地址之前把申請(qǐng)的空間的每個(gè)字節(jié)初始化為全0。

舉個(gè)例子:

#include<stdio.h>
#include<stdlib.h>
int main()
{
 int *p = calloc(10, sizeof(int));
 if(NULL != p)
 {
 //使用空間
 }
 free(p);
 p = NULL;
 return 0;
}

【C語言】動(dòng)態(tài)內(nèi)存函數(shù)介紹,C語言筆記,c語言

可以看到calloc把申請(qǐng)的空間初始化為零,所以如何我們對(duì)申請(qǐng)的內(nèi)存空間的內(nèi)容要求初始化,那么可以很方便的使用calloc函數(shù)來完成任務(wù)。

3.realloc

>>realloc函數(shù)的出現(xiàn)讓動(dòng)態(tài)內(nèi)存管理更加靈活。
>>有時(shí)會(huì)我們發(fā)現(xiàn)過去申請(qǐng)的空間太小了,有時(shí)候我們又會(huì)覺得申請(qǐng)的空間過大了,那為了合理的時(shí)候內(nèi)存,我們一定會(huì)對(duì)內(nèi)存的大小做靈活的調(diào)整。那 realloc 函數(shù)就可以做到對(duì)動(dòng)態(tài)開辟內(nèi)存大小的調(diào)整。
函數(shù)原型如下:
?
void* realloc(void* ptr, size_t size);
ptr 是要調(diào)整的內(nèi)存地址;
size 調(diào)整之后新大?。?
返回值為調(diào)整之后的內(nèi)存起始位置。
?
這個(gè)函數(shù)調(diào)整原內(nèi)存空間大小的基礎(chǔ)上,還會(huì)將原來內(nèi)存中的數(shù)據(jù)移動(dòng)到新的空間。
realloc在調(diào)整內(nèi)存空間的是存在兩種情況:
?
情況1:原有空間之后有足夠大的空間
當(dāng)是情況1 的時(shí)候,要擴(kuò)展內(nèi)存就直接原有內(nèi)存之后直接追加空間,原來空間的數(shù)據(jù)不發(fā)生變化。?
?
情況2:原有空間之后沒有足夠大的空間
是情況2 的時(shí)候,原有空間之后沒有足夠多的空間時(shí),擴(kuò)展的方法是:在堆空間上另找一個(gè)合適大小的連續(xù)空間來使用。這樣函數(shù)返回的是一個(gè)新的內(nèi)存地址。
舉個(gè)例子:
?
#include <stdio.h>
#include <stdlib.h>
int main()
{
 int *ptr = malloc(100);
 if(ptr != NULL)
 {
 ? ? //業(yè)務(wù)處理
 }
 else
 {
 ? ? exit(EXIT_FAILURE); ? ?
 }
 //擴(kuò)展容量
 //代碼1
 ptr = realloc(ptr, 1000);//這樣可以嗎?(如果申請(qǐng)失敗會(huì)如何?)
 
 //代碼2
 int*p = NULL;
 p = realloc(ptr, 1000);
 if(p != NULL)
 {
 ptr = p;
 }
 //業(yè)務(wù)處理
 free(ptr);
 return 0;
}

?

?

到了這里,關(guān)于【C語言】動(dòng)態(tài)內(nèi)存函數(shù)介紹的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包