批量資料的儲存
動態記憶體分配函式
void
*malloc
(unsigned
int size)
;void
*calloc
(unsigned
int n,
unsigned
int size)
;//分配n個,每個大小為size
void
*realloc
(void
* p_block,unsignde int size)
;//重新分配
void
free
(void
* p_block)
;//釋放
常用的malloc和free函式:
(1)malloc函式
void
*malloc
(unsigned
int size)
;
向系統申請分配指定位元組數的儲存空間,
分配size位元組儲存空間,分配成功返回首位址,
分配失敗返回null。
int i,
*p=(
int*
)malloc(6
*sizeof
(int))
;if(p)for
(i=0
;i<
6;i++
) p[i]
=i;else
printf
("dynamic alloc failed!"
)
(2)free函式
void
free
(void
* p_block)
;
釋放p_block指向的動態分配的儲存空間。
如:free§;
一旦釋放,就不能再用該指標引用儲存區內的資料。
如果指標為null,free函式無釋放操作。
注意:動態分配的儲存空間一定要用free函式釋放,而靜態分配的儲存空間當程式執行完成的時候自動釋放。
int
*p;//定義指標變數pp=(
int*
)malloc
(sizeof
(int))
;//分配存放整型資料的儲存空間,位址賦給p
if(p ==
null
)//如果記憶體分配不成功
……free
(p);
//釋放p所指向的儲存空間
(3)calloc函式:
void
*calloc
(unsigned
int n,
unsigned
int size)
;
向系統申請分配n項大小相同的儲存空間
分配成功:返回新分配儲存空間的首位址,新分配儲存空間均被初始化為0;
分配失敗:返回null
例如:int *q=(int*)calloc(6*sizeof(int));
可以替代mallocint *q=(int*)malloc(6*sizeof(int));
(如果不考慮初始化的值)
(4)realloc函式:
void
*realloc
(void
* p_block,unsignde int size)
;
對指標所指向的已動態分配的儲存空間重新進行動態儲存分配
如果縮小空間則返回的位址是原位址;
如果是擴大空間,則有三可能:
①原空間位置足夠的空間可以擴充,返回的位址與擴充前的位址相同;
②如果原位置無足夠的空間,按照size指定的大小重新分配空間,將原有的資料從頭到尾拷貝到新分配的記憶體區域,而後釋放原來指標所指記憶體區域,同時返回新分配的記憶體區域的首位址;
③否則說明記憶體無足夠的空間可以分配,分配失敗,返回值為null。
動態陣列實現的一般過程:
①定義陣列元素型別(t)的指標§
②指定陣列要存放的元素個數(n)
③動態申請(n*sizeof(t))大小的儲存空間,並讓p指向該儲存空間首位址
④通過p對陣列進行賦值和操作
⑤使用結束後釋放陣列空間
mallco動態分配 malloc動態分配多維陣列
下面試自己寫的三個測試程式,如果看懂了基本上動態分配多維陣列就沒什麼問題啦 重點 1 深刻理解多維陣列的概念,多維陣列在記憶體中的分配情況,基本上動態分配也沒什麼問題的。然後還要注意一點的就是,釋放是分配的逆過程!include include include void main void int ...
常見動態分配記憶體分配函式
1.malloc函式的使用方法 void malloc unsigned size 其中size是指的分配記憶體的位元組 void malloc unsigned size 包含在庫函式 stdlib.h 中,作用是在記憶體的堆區分配乙個大小為size的連續空間,如果分配記憶體成功,函式返回新分配記...
記憶體動態分配
陣列的元素儲存於記憶體中連續的位置上。當乙個陣列被宣告時,它所需要的內存在編譯時就被分配。但是,你也可以使用動態記憶體分配在執行時為它分配記憶體。malloc所分配的是一塊連續的記憶體。例如,如果請求它分配100個位元組的記憶體,那麼它實際分配的記憶體就是100個連續的位元組,並不會分開位於兩塊或多...