malloc簡單解釋

2021-10-04 23:33:08 字數 1605 閱讀 2820

malloc返回值是乙個通用指標,可以通過強制轉換,轉換成任何型別的指標

*h=(linklist )malloc

(sizeof

(node)

); p=

(linklist*

)malloc

(sizeof

(node));

解釋這兩句**左右等號中的星號的意思

先解釋等號右邊的星號;

等號右邊的星號是強制型別轉換,(linklist* )是指向linklist型別的指標,此時malloc返回的是沒有型別的指標,根據等號左邊的型別來決定等號右邊的型別

比如你要賦值給int型別,等號右邊就寫(int),而如源果你要賦值給char型別,等號右邊就寫(char)。當然你也可以把乙個指標變數賦值給乙個整型,那等號右邊就寫(int)。

等號左邊的星號是具體你要看他除去星號的本身是不是指標。

例如

int

*p;int i =8;

*p =

( linklist *

)malloc

(sizeof

(node));

//這裡p本身就是指標,所以*p就是指i,這裡的操作就是重新分配儲存i的空間

p =(linklist*

)malloc

(sizeof

(node));

//這裡的操作是給p重新賦值,將指標p指向新分配的空間

(linklist)malloc(sizeof(node));

這句**的意思就是申請乙個node型別大小的記憶體,強制轉化為linklist型別

typedef

struct node

node,

*linklist;

//首先定義以上結構

1.*l =

(linklist)

malloc

(sizeof

(node));

和2.*l =

(linklist*

)malloc

(sizeof

(node)

);的區別是什麼?

//注意!!!兩句**中的*l實際上不是同乙個東西;

第一句**中的l實際上被定義成了linklist *l也就是代表鍊錶中的元素

第二句**實際上被定義成了linklist l型別,也就是指向單鏈表頭結點的指標。

因為**1代表鍊錶中的元素,所以右邊要強制轉換成linklist型資料,即定義成與l同型別的資料,來賦值給l

**2*l是指標,所以右邊要強制轉換成linklist *,強制轉換成和指標l同型別,才能賦值給左邊的指標l

1.p =

(node*

)malloc

(sizeof

(node));

和2.p =

(linklist*

)malloc

(sizeof

(node)

);的區別

第一句**申請的是普通結點。

第二局**申請的是頭結點。

glibc中malloc的詳細解釋

應用程式是從0x8048000開始,那是由linker定的,具體數值在一linker指令碼定的,具 體在哪忘了,只在linux上是這樣,到其它的平台上,可能就是另外乙個值了,這只是個約定。0x804a008到0x8048000之間是程式 的.text,data,bss等內容。而mmap分配的記憶體位...

malloc函式的簡單實現

網上看到的乙個實驗題 1 先定義乙個全域性緩衝區 define mempool size 1024 1024 static char g mempool mempool size 2 實現兩個函式my malloc my free,它們都從g mempool中分配記憶體,並負責 合併等 其原理圖如下...

malloc與free簡單使用

寫 肯定少不了與記憶體打交道,今天就來聊一聊malloc和free的簡單使用 malloc用來開闢記憶體,一般用sizeof來獲得這個型別的大小,還有malloc返回的是void 所以經常申請記憶體後需要強制型別轉換,下面來看乙個例子 include include intmain 當然這個記憶體不...