本文目錄一覽:
- 1、C語言calloc的用法?
- 2、C語言calloc函數
- 3、c語言中的動態內存分配函數malloc, calloc, realloc分別是那幾個單詞的縮寫?謝謝。
- 4、malloc()和calloc()有啥區別
- 5、C語言中malloc()和calloc()有什麼區別?
C語言calloc的用法?
void *calloc(size_t nobj, size_t size);calloc函數為由nobj個長度為size的對象組成的數組分配內存,並返回指向分配區域的指針;若無法滿足要求,則返回NULL。該空間的初始長度為0位元組
void *malloc(size_t size);malloc函數為長度size的對象分配內存,並返回指向分配區域的指針;若無法滿足要求,則返回NULL。該函數不對分配的內存區域進行初始化。
void *realloc(void *p, size_t size);realloc函數將p指向的對象的長度修改為size個位元組。如果新分配的內存比原來內存大,則內存的內容保持不變,增加的空間不進行初始化。如果新分配的內存比原來的內存小,則分配內存單元不初始化,realloc函數返回指向新分配空間的指針;若無法滿足要求,則返回NULL。在這種情況下,原來指針p指向的單元內容保持不變。
str = (char*)calloc(10,sizeof(char));是什麼意思?
是分配10個大小為char,也就是十個位元組的內存給str,地址類型是char指針
C語言calloc函數
calloc函數的功能與malloc函數的功能相似,都是從堆分配內存。
函數名: calloc
函數原型:void *calloc(int n,int size);
功 能: 函數返回值為void型指針。如果執行成功,函數從堆上獲得size X n的位元組空間,並返回該空間的首地址。如果執行失敗,函數返回NULL。該函數與malloc函數的一個顯著不同時是,calloc函數得到的內存空間是經過初始化的,其內容全為0。calloc函數適合為數組申請空間,可以將size設置為數組元素的空間長度,將n設置為數組的容量。
示例代碼:
#include stdio.h
#include stdlib.h
#define SIZE 5
int main()
{
int * p=NULL;
int i=0;
//為p從堆上分配SIZE個int型空間
p=(int *)calloc(SIZE,sizeof(int));
if(NULL==p){
printf(“Error in calloc.\n”);
return -1;
}
//為p指向的SIZE個int型空間賦值
for(i=0;iSIZE;i++)
p[i]=i;
//輸出各個空間的值
for(i=0;iSIZE;i++)
printf(“p[%d]=%d\n”,i,p[i]);
free(p);
p=NULL;
return 0;
}
c語言中的動態內存分配函數malloc, calloc, realloc分別是那幾個單詞的縮寫?謝謝。
malloc應該就是memory allocate
realloc就是加個re前綴
calloc有人說是complex也有說是clear的,與malloc區別就是多了清0操作
malloc()和calloc()有啥區別
malloc()和calloc()的區別:
malloc()和calloc()的功能都是在內存的動態存儲區中分配n個長度為size的連續空間,函數返回一個指向分配起始地址的指針。
而他們之間的區別就是calloc在動態分配完內存後,自動初始化該內存空間為零,而malloc不初始化,裡邊數據是隨機的垃圾數據。比如說在內存中分配長度為10的int類型的數組,若使用的是函數calloc(),則數組被初始化為10個0,若是使用malloc()函數,則數組裡面存的是垃圾數據。
擴展資料:
malloc()在內存中分配內存的工作機制:
malloc函數的實質體現在,它有一個將可用的內存塊連接為一個長長的列表的所謂空閑鏈表。
調用malloc函數時,它沿連接表尋找一個大到足以滿足用戶請求所需要的內存塊。
然後,將該內存塊一分為二(一塊的大小與用戶請求的大小相等,另一塊的大小就是剩下的位元組)。
接下來,將分配給用戶的那塊內存傳給用戶,並將剩下的那塊(如果有的話)返回到連接表上。調用free函數時,它將用戶釋放的內存塊連接到空閑鏈上。
到最後,空閑鏈會被切成很多的小內存片段,如果這時用戶申請一個大的內存片段,那麼空閑鏈上可能沒有可以滿足用戶要求的片段了。
於是,malloc函數請求延時,並開始在空閑鏈上翻箱倒櫃地檢查各內存片段,對它們進行整理,將相鄰的小空閑塊合併成較大的內存塊。
如果無法獲得符合要求的內存塊,malloc函數會返回NULL指針,因此在調用malloc動態申請內存塊時,一定要進行返回值的判斷。
參考資料:
百度百科-malloc()
百度百科-calloc()
C語言中malloc()和calloc()有什麼區別?
這是申請內存的函數,存在與頭文件stdlib.h中,malloc的使用方法最簡單接下來是例子:
#includestdlib.h
#includestdio.h
main()
{
int
*m;
m=(int
*)malloc(sizeof(int)*16);//這裡每次在使用malloc的時候前面要加一個強制類型轉換,轉換到你需要的類型,後面的括弧內就是申請的大小,我這例子是申請的16個整數型大小內存代表這個m可以當數組用了
m[11]=8899;
printf(“%d”,m[11]);
free(m);//記得每次申請後都需要釋放內存,不然會造成浪費影響計算機運行速度
}
calloc是申請後自動將申請的內存全都初始化為0
舉個例子:
#includestdio.h
#includestdlib.h
main()
{
int
*m;
m=(int
*)calloc(16,sizeof(int));//是不是感覺差不多就是把*改成了,而已
printf(“%d”,m[10]);//這個肯定是0
free(m);
}
將他們的原型放在這裡void
*malloc(int
size);
void
*calloc(int
number,int
size);
size代表大小,number代表個數
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/242411.html