1樓:戢恭可儀
函式malloc()和calloc()都可以用來動態分配記憶體空間,但兩者稍有區別。
malloc()函式有乙個引數,即要分配的記憶體空間的大小:
voidmalloc(size_t
size);
calloc()函式有兩個引數,分別為元素的數目和每個元素的大小,這兩個引數的乘積就是要分配的記憶體空間的大小。
voidcalloc(size_t
numelements,size_t
sizeof
element));
如果呼叫成功,函式malloc()和函式calloc()都將返回所分配的記憶體空間的首位址。
函式malloc()和函式calloc()的主要區別是前者不能初始化所分配的記憶體空間,而後者能。
如果由malloc()函式分配的記憶體空間原來沒有被使用過,則其中的每一位可能都是0;反之,如果這部分記憶體曾經被分配過,則其中可能遺留有各種各樣的資料。也就是說,使用malloc()函式的程式開始時(記憶體空間還沒有被重新分配)能正常進行,但經過一段時間(記憶體空間還已經被重新分配)可能會出現問題。
函式calloc()會將所分配的記憶體空間中的每一位都初始化為零,也就是說,如果你是為字元型別或整數型別的元素分配記憶體,那麼這些元素將保證會被初始化為0;如果你是為指標型別的元素分配記憶體,那麼這些元素通常會被初始化為空指標;如果你為實型資料分配記憶體,則這些元素會被初始化為浮點型的零。
2樓:頓建設容鸞
你好!calloc分配好記憶體空間之後,返回指向該空間的指標,但是此時無法操作這塊記憶體,如果要操作這塊記憶體,必須要將記憶體初始化成某種格式,就好象做工廠批量生產東西需要乙個模型,原理一樣。
malloc和calloc一樣,都需要強制轉換成你說的結構體型別。
區別:calloc在動態分配完記憶體後,自動初始化該記憶體空間為零,而malloc不初始化,裡邊資料是隨機的垃圾資料。
如果對你有幫助,望。
3樓:網友
malloc是一次分配位址,calloc是經過malloc分配位址不夠用了,再在malloc已經分配的位址空間的基礎上追加引數那麼大的位址~~~
4樓:網友
malloc是一次分配位址,calloc是經過malloc分配位址不夠用了,再在malloc已經分配的位址空間的基礎上追加引數那麼大的位址~~~
二級c語言fun函式,二級C語言fun函式
fun函式 c語言中,fun函式是用呼叫主函式的。它是指用fun來定義一個函式或是方法,這樣在引用時可以用fun表示。比如fun int x,y fun int x,y 有上面的出現,必然在主函式裡有調它,fun沒有其它意思,只是在調時用到這個單詞,上面的意思是呼叫主函式中的數值。注意,c 語言標準...
c語言二級題目求解,C語言二級題目求解
要理解這個,首先要知道陣列和指標的一些關係。在記憶體中,陣列使用一塊連續的記憶體區域,陣列名即是指向陣列第一個元素的指標。首先,我們來看第一段 main函式中定義了一個10個元素的整數陣列,分別賦了初值。sum函式接受一個整數型指標,在呼叫sum函式的時候,取出了陣列第3個元素的地址,傳進sum中,...
c語言二級題,求解,二級C語言題,急求解
首先func int a,int b,int c 的返回值是其三個引數之和.r func x y z,x y 它的三個引數分別是 x y z 6 x 2 y 3.所以是r func 6,2,3 引數之和是11 函式裡面形參 p會改變原來的值,int形式的不會改變,按照這個來算就行了 輸入是a 36,...