1. 程式人生 > >C語言中malloc函數的理解

C語言中malloc函數的理解

萬能 一個 函數 語言 就是 有一個 類型轉換 har 扯淡

在C語言中malloc函數主要是用在堆內存的申請上,使用malloc函數時,函數會返回一個void *類型的值,這個值就是你申請的堆內存的首地址;為什麽返回的地址是一個void *類型的地址呢?首先我們要先弄明白,到底void是一個什麽類型呢?很多C語言的初學者認為,void類型就是空類型,就是沒有類型,但是實際上這種認知是扯淡的。因為空白的意思是可以容納百物(講C語言突然講出了道家的思想,自己這麽流弊的嗎?哈哈哈哈哈嗝),既然可以容納百物,也就是void型其實就是萬能型,它可以指代任意類型。其次,還有一個疑問就是malloc函數作為一個申請堆內存的函數,為什麽需要返回一個void *型的地址呢?這是由於,malloc函數是一個通用型函數,我們無論申請什麽類型(int、float、char......)都是使用malloc函數去申請的,malloc函數也不能智能地識別到我們想要申請什麽類型的內存,所以就幹脆來個一刀切,全部都給你返回一個void *型的地址,到時候你需要使用你自己申請的地址的時候,就強制類型轉換一下,就可以使用了。如:int *p = (int *)malloc(1000*sizeof(int));就是申請了1000個int類型(4000字節)的空間,將返回的void *類型地址強制轉換成int *類型,然後在將該地址賦值到int * 類型的指針變量p中。還需要註意一點:C語言中的所有數值必須是有類型的,void類型也是一種類型,所以malloc函數要返回堆內存的首地址,就必須把首地址賦值成萬能類型void;而不是沒有類型。

C語言中malloc函數的理解