国产成人v爽在线免播放观看,日韩欧美色,久久99国产精品久久99软件,亚洲综合色网站,国产欧美日韩中文久久,色99在线,亚洲伦理一区二区

學(xué)習(xí)啦>學(xué)習(xí)英語(yǔ)>專(zhuān)業(yè)英語(yǔ)>計(jì)算機(jī)英語(yǔ)>

c中malloc的用法

時(shí)間: 長(zhǎng)思709 分享

  下面小編就跟你們?cè)敿?xì)介紹下c中malloc的用法的用法,希望對(duì)你們有用。

  c中malloc的用法的用法如下:

  函數(shù)聲明(函數(shù)原型):

  void *malloc(int size);

  說(shuō)明:malloc 向系統(tǒng)申請(qǐng)分配指定size個(gè)字節(jié)的內(nèi)存空間。返回類(lèi)型是 void* 類(lèi)型。void* 表示未確定類(lèi)型的指針。C,C++規(guī)定,void* 類(lèi)型可以強(qiáng)制轉(zhuǎn)換為任何其它類(lèi)型的指針。

  從函數(shù)聲明上可以看出。malloc 和 new 至少有兩個(gè)不同: new 返回指定類(lèi)型的指針,并且可以自動(dòng)計(jì)算所需要大小。比如:

  int *p;

  p = new int; //返回類(lèi)型為int* 類(lèi)型(整數(shù)型指針),分配大小為 sizeof(int);

  或:

  int* parr;

  parr = new int [100]; //返回類(lèi)型為 int* 類(lèi)型(整數(shù)型指針),分配大小為 sizeof(int) * 100;

  而 malloc 則必須由我們計(jì)算要字節(jié)數(shù),并且在返回后強(qiáng)行轉(zhuǎn)換為實(shí)際類(lèi)型的指針。

  int* p;

  p = (int *) malloc (sizeof(int));

  第一、malloc 函數(shù)返回的是 void * 類(lèi)型,如果你寫(xiě)成:p = malloc (sizeof(int)); 則程序無(wú)法通過(guò)編譯,報(bào)錯(cuò):“不能將 void* 賦值給 int * 類(lèi)型變量”。所以必須通過(guò) (int *) 來(lái)將強(qiáng)制轉(zhuǎn)換。

  第二、函數(shù)的實(shí)參為 sizeof(int) ,用于指明一個(gè)整型數(shù)據(jù)需要的大小。如果你寫(xiě)成:

  int* p = (int *) malloc (1);

  代碼也能通過(guò)編譯,但事實(shí)上只分配了1個(gè)字節(jié)大小的內(nèi)存空間,當(dāng)你往里頭存入一個(gè)整數(shù),就會(huì)有3個(gè)字節(jié)無(wú)家可歸,而直接“住進(jìn)鄰居家”!造成的結(jié)果是后面的內(nèi)存中原有數(shù)據(jù)內(nèi)容全部被清空。

  malloc 也可以達(dá)到 new [] 的效果,申請(qǐng)出一段連續(xù)的內(nèi)存,方法無(wú)非是指定你所需要內(nèi)存大小。

  比如想分配100個(gè)int類(lèi)型的空間:

  int* p = (int *) malloc ( sizeof(int) * 100 ); //分配可以放得下100個(gè)整數(shù)的內(nèi)存空間。

  另外有一點(diǎn)不能直接看出的區(qū)別是,malloc 只管分配內(nèi)存,并不能對(duì)所得的內(nèi)存進(jìn)行初始化,所以得到的一片新內(nèi)存中,其值將是隨機(jī)的。

  除了分配及最后釋放的方法不一樣以外,通過(guò)malloc或new得到指針,在其它操作上保持一致。

  =============================================

  函數(shù)malloc()和calloc()都可以用來(lái)動(dòng)態(tài)分配內(nèi)存空間,但兩者稍有區(qū)別。

  malloc()函數(shù)有一個(gè)參數(shù),即要分配的內(nèi)存空間的大小:

  void *malloc(size_t size);

  calloc()函數(shù)有兩個(gè)參數(shù),分別為元素的數(shù)目和每個(gè)元素的大小,這兩個(gè)參數(shù)的乘積就是要分配的內(nèi)存空間的大小。

  void *calloc(size_t numElements,size_t sizeOfElement);

  如果調(diào)用成功,函數(shù)malloc()和函數(shù)calloc()都將返回所分配的內(nèi)存空間的首地址。

  函數(shù)malloc()和函數(shù)calloc()的主要區(qū)別是前者不能初始化所分配的內(nèi)存空間,而后者能。如果由malloc()函數(shù)分配的內(nèi)存空間原來(lái)沒(méi)有 被使用過(guò),則其中的每一位可能都是0;反之,如果這部分內(nèi)存曾經(jīng)被分配過(guò),則其中可能遺留有各種各樣的數(shù)據(jù)。也就是說(shuō),使用malloc()函數(shù)的程序開(kāi) 始時(shí)(內(nèi)存空間還沒(méi)有被重新分配)能正常進(jìn)行,但經(jīng)過(guò)一段時(shí)間(內(nèi)存空間還已經(jīng)被重新分配)可能會(huì)出現(xiàn)問(wèn)題。

  函數(shù)calloc()會(huì)將所分配的內(nèi)存空間中的每一位都初始化為零,也就是說(shuō),如果你是為字符類(lèi)型或整數(shù)類(lèi)型的元素分配內(nèi)存,那麼這些元素將保證會(huì)被初始 化為0;如果你是為指針類(lèi)型的元素分配內(nèi)存,那麼這些元素通常會(huì)被初始化為空指針;如果你為實(shí)型數(shù)據(jù)分配內(nèi)存,則這些元素會(huì)被初始化為浮點(diǎn)型的零。

  需要包含頭文件:

  #include <malloc.h>

  或

  #include<stdlib.h>

  函數(shù)聲明(函數(shù)原型):

  void *malloc(int size);

  說(shuō)明:malloc 向系統(tǒng)申請(qǐng)分配指定size個(gè)字節(jié)的內(nèi)存空間。返回類(lèi)型是 void* 類(lèi)型。void* 表示未確定類(lèi)型的指針。C,C++規(guī)定,void* 類(lèi)型可以強(qiáng)制轉(zhuǎn)換為任何其它類(lèi)型的指針。

  從函數(shù)聲明上可以看出。malloc 和 new 至少有兩個(gè)不同: new 返回指定類(lèi)型的指針,并且可以自動(dòng)計(jì)算所需要大小。比如:

  int *p;

  p = new int; //返回類(lèi)型為int* 類(lèi)型(整數(shù)型指針),分配大小為 sizeof(int);

  或:

  int* parr;

  parr = new int [100]; //返回類(lèi)型為 int* 類(lèi)型(整數(shù)型指針),分配大小為 sizeof(int) * 100;

  而 malloc 則必須由我們計(jì)算要字節(jié)數(shù),并且在返回后強(qiáng)行轉(zhuǎn)換為實(shí)際類(lèi)型的指針。

  int* p;

  p = (int *) malloc (sizeof(int));

  第一、malloc 函數(shù)返回的是 void * 類(lèi)型,如果你寫(xiě)成:p = malloc (sizeof(int)); 則程序無(wú)法通過(guò)編譯,報(bào)錯(cuò):“不能將 void* 賦值給 int * 類(lèi)型變量”。所以必須通過(guò) (int *) 來(lái)將強(qiáng)制轉(zhuǎn)換。

  第二、函數(shù)的實(shí)參為 sizeof(int) ,用于指明一個(gè)整型數(shù)據(jù)需要的大小。如果你寫(xiě)成:

  int* p = (int *) malloc (1);

  代碼也能通過(guò)編譯,但事實(shí)上只分配了1個(gè)字節(jié)大小的內(nèi)存空間,當(dāng)你往里頭存入一個(gè)整數(shù),就會(huì)有3個(gè)字節(jié)無(wú)家可歸,而直接“住進(jìn)鄰居家”!造成的結(jié)果是后面的內(nèi)存中原有數(shù)據(jù)內(nèi)容全部被清空。

  malloc 也可以達(dá)到 new [] 的效果,申請(qǐng)出一段連續(xù)的內(nèi)存,方法無(wú)非是指定你所需要內(nèi)存大小。

  比如想分配100個(gè)int類(lèi)型的空間:

  int* p = (int *) malloc ( sizeof(int) * 100 ); //分配可以放得下100個(gè)整數(shù)的內(nèi)存空間。

  另外有一點(diǎn)不能直接看出的區(qū)別是,malloc 只管分配內(nèi)存,并不能對(duì)所得的內(nèi)存進(jìn)行初始化,所以得到的一片新內(nèi)存中,其值將是隨機(jī)的。

  除了分配及最后釋放的方法不一樣以外,通過(guò)malloc或new得到指針,在其它操作上保持一致。

  =============================================

  原型:extern void *malloc(unsigned int num_bytes);

  用法:#include <malloc.h>

  或#include<stdlib.h>

  功能:分配長(zhǎng)度為num_bytes字節(jié)的內(nèi)存塊

  說(shuō)明:如果分配成功則返回指向被分配內(nèi)存的指針,否則返回空指針NULL。

  當(dāng)內(nèi)存不再使用時(shí),應(yīng)使用free()函數(shù)將內(nèi)存塊釋放。

  malloc的語(yǔ)法是:指針名=(數(shù)據(jù)類(lèi)型*)malloc(長(zhǎng)度),(數(shù)據(jù)類(lèi)型*)表示指針.

  舉例:

  // malloc.c

  #include <syslib.h>

  #include <malloc.h>

  main()

  {

  char *p;

  clrscr(); // clear screen

  p=(char *)malloc(100);

  if(p)

  printf("Memory Allocated at: %x",p);

  else

  printf("Not Enough Memory!\n");

  free(p);

  getchar();

  return 0;

  }

  =============================================

  malloc()函數(shù)的工作機(jī)制

  malloc函數(shù)的實(shí)質(zhì)體現(xiàn)在,它有一個(gè)將可用的內(nèi)存塊連接為一個(gè)長(zhǎng)長(zhǎng)的列表的所謂空閑鏈表。調(diào)用malloc函數(shù)時(shí),它沿連接表尋找一個(gè)大到足以滿(mǎn)足用戶(hù)請(qǐng)求所需要的內(nèi)存塊。然后,將該內(nèi)存塊一分為二(一塊的大小與用戶(hù)請(qǐng)求的大小相等,另一塊的大小就是剩下的字節(jié))。接下來(lái),將分配給用戶(hù)的那塊內(nèi)存?zhèn)鹘o用戶(hù),并將剩下的那塊(如果有的話(huà))返回到連接表上。調(diào)用free函數(shù)時(shí),它將用戶(hù)釋放的內(nèi)存塊連接到空閑鏈上。到最后,空閑鏈會(huì)被切成很多的小內(nèi)存片段,如果這時(shí)用戶(hù)申請(qǐng)一個(gè)大的內(nèi)存片段,那么空閑鏈上可能沒(méi)有可以滿(mǎn)足用戶(hù)要求的片段了。于是,malloc函數(shù)請(qǐng)求延時(shí),并開(kāi)始在空閑鏈上翻箱倒柜地檢查各內(nèi)存片段,對(duì)它們進(jìn)行整理,將相鄰的小空閑塊合并成較大的內(nèi)存塊。

c中malloc的用法

下面小編就跟你們?cè)敿?xì)介紹下c中malloc的用法的用法,希望對(duì)你們有用。 c中malloc的用法的用法如下: 函數(shù)聲明(函數(shù)原型): void *malloc(int size); 說(shuō)明:malloc 向系統(tǒng)申請(qǐng)分配指定size個(gè)字節(jié)的內(nèi)存空間。返回類(lèi)型是 void* 類(lèi)型。void
推薦度:
點(diǎn)擊下載文檔文檔為doc格式

熱門(mén)文章

537216