2012-04-14 27 views
0
void* buffer = (void*)malloc(100); 

通過在malloc()函數前加上(void *),實現了什麼,我們是否覆蓋了返回類型?爲什麼malloc前面有(void *)?

+8

這意味着作者不知道'malloc'返回類型爲'void *'的指針 – 2012-04-14 19:59:15

+1

這是* cast *,而不是前綴,btw。 – 2012-04-14 20:16:49

回答

4

調用的返回類型malloc被明確地轉換爲void指針:這是等價的。這是多餘的,因爲它已經返回void*,但是 可能是 可能存在以澄清開發者的意圖(或者他只是搞砸了)。

+2

「可能是爲了澄清開發者的意圖」如果是這樣的話,那麼這對作者來說就是一個很大的瑕疵。演員有放棄類型系統的效果。 Sane程序員儘可能的努力嘗試使用強制轉換。添加虛假無用的演員陣容是無法相信的。 – 2012-04-14 20:01:42

+0

@DavidHeffernan真的,好點。我總是試圖給出疑問的好處,但只是編輯了我的回答。 – 2012-04-14 20:03:41

6

因爲malloc已經返回一個void指針,所以沒有實現。

void* buffer = malloc(100); 
+0

感謝您的及時迴應。但是那個前綴做了什麼呢? – jwbensley 2012-04-14 19:58:13

+1

它什麼都不做,你可以刪除它,代碼是等效的。 – 2012-04-14 19:59:20

+0

現在明白了,歡呼聲:D – jwbensley 2012-04-14 20:03:46

4

在這種特殊情況下,它什麼都不做。然而,由於C++是比C更嚴格的關於類型安全,你通常需要轉換的malloc返回:

void* x = malloc(100);  //OK in C/C++ 
int* y = malloc(100);  //OK in C, error in C++ 
int* z = (int*)malloc(100); //OK in C/C++, not recommended for C 

然而,由於您使用C++,我不能不告訴你,你應該使用new代替。

+0

感謝您的分手:D – jwbensley 2012-04-14 20:51:39