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 當然這個記憶體不...