c語言支援動態記憶體管理,物件從堆上分配出來的記憶體,使用分配和釋放函式實現的,這個過程為動態記憶體管理
(1).用malloc類的函式分配記憶體
(2). 用free函式釋放記憶體
#include
"stdio.h"
#include
"malloc.h"
intmain()
for(
int j =
0;j<=
5;j++
)free
(p);
}
執行結果:
利用malloc函式,將分配的連續記憶體的首位址賦給指標變數p;連續記憶體為24個位元組,6個整型變數的空間大小。最後利用free()函式釋放分配的動態記憶體
****注意:malloc函式分配指定的位元組數,會從返回從堆上分配的記憶體指標。(位址)因此在給指標變數p賦值時,不應該使用解引的操作符&
#include
"stdio.h"
#include
"malloc.h"
intmain()
}
執行結果:
最後pi的會指向字串結尾的null字元,分配的記憶體起始位址丟失
malloc函式的典型用法:
int
*p = (int
*)malloc
(sizeof
(int))
;
執行malloc函式會進行相關操作
(1).從堆上分配記憶體
(2).記憶體不會被修改或者清空
(3).返回首位元組的位址
注意:malloc函式可能由於使用者定義引數的原因,使得malloc函式無法分配記憶體,返回null,因此在使用它返回的指標之前通常需要先檢查null;
int
*p =
(int*)
malloc
(sizeof
(int))
;if(p ==
null
)else
realloc可以不時的增加或者減小指標分配的記憶體,如果我們遇到需要變長陣列這個用法特別有用
void
*realloc
(void
*ptr,size_t size)
;
realloc函式有兩個引數,第乙個引數,指向原記憶體塊的指標,第二個為請求大小relloc函式引數不同的影響:(1).第乙個引數為空,第二個引數無,realloc函式等同於malloc函式
(2).第乙個引數為非空,第二個引數0,原來的記憶體被釋放
(3).第乙個引數為非空,第二個引數比原來的記憶體小,realloc函式利用當前的塊分配更小的塊
(4).第乙個引數為非空,第二個引數比原來的記憶體大,realloc函式在當前位置或者其他 位置分配更大的塊。
#include
"stdio.h"
#include
"malloc.h"
intmain()
執行結果:
如果第二個引數比原有的記憶體大,則可能首位元組的位址變化,也可能不變
日積月累 day3
sector 扇區,段 分段 vertically 豎直地,直立地 horizonally 水平地backspace 退格,回退 terminate 端接,終止 drag 拖,拉,牽,拽 formatted 有格式的 underscore 在.下面劃線 initially 最初,開頭 reforma...
C 基礎知識day3
1.過載函式 函式過載 函式名相同,可以有不同的定義 實現形式不同 void swap int int a,int b void swap double double a,double b void swap char char a,char b 函式名相同,形參型別不同,可以構成函式過載 c 編譯...
C語言學習Day3
scanf c a 修改變數的值,傳變數的位址 printf a c a 只是使用變數的值,傳變數就行 define crt secure no warnings include include scanf等待輸入資料 intmain 20 i 20 c scanf被呼叫的時候,我們會在輸入20然後...