malloc 是記憶體分配分配的空間以位元組為單位
sizeof(int)*(n+1) 是求乙個位元組數的過程
sizeof(int)就是int型別的位元組數,再*(n+1),其實就是連續的n+1個int型數的空間所含的位元組數
前面二者合起來就是分配了大小為n+1個int型的空間所含的位元組數
此時(int*)是強制轉化為int型的指標,所以p就是乙個指向這連續n+1個int的int指標。
這種分配記憶體的方式是c語言中實現的,為什麼不直接指明位元組數,而用sizeof(int)這種運算是因為對於不同的計算機,對於int的分配空間不一定相同,這樣有一定的移值性。
sizeof就是空間大小,malloc就是分配空間的意思,int整形int* 將malloc分配的記憶體空間強制轉換為int型的指標。
(malloc申請的記憶體都是空型別 也就是 void * 但是,
這個記憶體取決於你怎麼去使用,所以,將其轉換為相應的型別是必要的!
malloc返回的是void*
)指標裡邊存放的只有位址而已 沒有指向的記憶體大小
比如你可以把char *型的指標強制轉換成int * 那麼引用的時候就會取4個位元組的記憶體
(原來只會取乙個位元組,這個就是強制轉換的意義了吧)
(int *)malloc(sizeof(int)) sizeof(int)=4 int佔4個位元組
(int *)malloc(sizeof(int *)) sizeof(int *)=4 指標佔4個位元組
(char *)malloc(sizeof(char)) sizeof(char)=1 char佔1個位元組
(char *)malloc(sizeof(char *)) sizeof(char *)=4 指標佔4個位元組
如果前面有宣告char *malloc();
那麼malloc(sizeof(char))/malloc(sizeof(char *))等同於上面後2個
至於為什麼要加 char * 這取決於malloc的左值,
因為malloc的左值是被宣告為指向不同型別的指標,
不同型別的指標之間是不能賦值的,所以需要char * 進行強制型別轉換
free(void *p)函式是用來釋放程式動態申請的記憶體。其引數是個指標型別。在c當中,只有當使用了動態記憶體申請函式malloc calloc realloc申請記憶體之後,才可以使用free來釋放之。釋放之後就不能再使用了。
在c++中,除了上述函式之外,還有new操作之後,都要使用free函式。
切記,動態申請記憶體使用完後,一定要記得釋放,否則會有記憶體洩露問題。
malloc函式的用法
malloc函式是一種分配長度為num bytes位元組的記憶體塊的函式,可以向系統申請分配指定size個位元組的記憶體空間。malloc的全稱是memory allocation 動態記憶體分配 當無法知道記憶體具體位置的時候,想要繫結真正的記憶體空間,就需要用到動態的分配記憶體。返回型別是 vo...
malloc 函式的用法
函式宣告 函式原型 void malloc int size 說明 malloc 向系統申請分配指定size個位元組的記憶體空間。返回型別是 void 型別。void 表示未確定型別的指標。c,c 規定,void 型別可以強制轉換為任何其它型別的指標。從函式宣告上可以看出。malloc 和 new ...
malloc函式用法
void malloc int size 說明 malloc向系統申請分配size位元組的記憶體空間,返回型別為void 型別。int p p int malloc sizeof int 注意 1 因為malloc返回的是不確定型別的指標,所以返回之前必須經過型別強制轉換,否則編譯報錯,如 不能將v...