C指標深入 day3

2021-10-11 11:12:32 字數 1861 閱讀 4807

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然後...