2011-09-29 58 views
-3

誰能幫我解釋這行做無法理解這樣的代碼做什麼

(UserList *) malloc(sizeof(UserList)); 

我是新的C世界。我的理解是爲Userlist類型分配內存。 如果是這樣,爲什麼定義不只是

Userlist malloc(sizeof(UserList)) ? 
+0

我們需要更多的上下文。我想第一行可能是演員。但是你可能會把它分配給某些東西。 – onemasse

+0

爭論語法(即,「爲什麼不是這樣,而不是...?」)似乎有點..毫無意義,你不覺得嗎?就是這樣。 – Blindy

+2

答案:這段代碼不會有任何用處。 –

回答

2

這段代碼是做是爲UserList類型的結構分配動態內存。前面的表達式(UserList*)告訴編譯器哪種類型要處理由malloc返回的值。由於malloc在C中是通用的,並且可以返回指向任何類型的指針(有效地使用C術語,void*),所以您可以告訴編譯器該指針指向的是什麼類型。這通常發生在UserList*類型的變量的初始化的情況下:

UserList* user_list = (UserList *) malloc(sizeof(UserList)); 

注意變量中獲得的結果如何是指向正確的類型。您可以使用正常的*user_list語法訪問此新分配內存中指針指向的結構。

+0

實際上,你不必告訴編譯器什麼類型的內存,它實際上是C社區所不喜歡的。 – Blindy

+0

@布林迪:是的,謝謝,正當我重新閱讀時糾正了它。 :) –

0

malloc向分配的內存返回一個指針(內存位置)。 *表示「指向」UserList而不是用戶列表本身。

我不確定這一行是聲明還是聲明。如果它是一個語句,那麼括號會導致返回的指針類型被轉換爲「指向UserList的指針」而不是「void *」,這意味着指向任何東西。