2017-05-04 102 views
-1

假設我們有一個struct「message_t」:鑄造void指針,以結構

message_t *msg; 

如果一個函數返回一個空指針可以在我們只需要把地址分配給味精,還是我們需要轉換指針?:

void *data; 
msg = data; 

我見過這裏的「數據」將被轉換爲message_t箱子,但是這似乎並沒有完全必要的,所以在這種情況下,你會怎麼做呢?

當然指針類型(message_t)應該足以告訴編譯器如何取消引用指針(即多少個字節在struct需要第一可變,等等)。

讓我知道如果我的問題不明確。

+3

如果不解除引用指針,則不能將指針轉換爲結構。您可以將它轉換爲指向結構的指針('message_t *')。 –

+0

演員實際上做了什麼? – user3163179

+1

您不能只將一個類型的指針投射到另一個類型的指針。你是如何獲得'void *'的?閱讀[問]並提供[mcve]。 – Olaf

回答

3

你不需要投空指針,但你可以的,如果你想,即,爲了清楚。以下簡單示例說明了這一點:

void* data = malloc(32); 
char* msg = data; 
strcpy(msg, "Testing."); 
+0

好吧,這是開始有意義!你能否詳細說明爲什麼你真的想要施展它?我認爲我的困惑來自於似乎沒有必要的事實。 – user3163179

+0

同樣,我們可以這樣做: int a = 5; double * b =&a; 甚至認爲我可能會得到意想不到的結果。 – user3163179

+0

@ user3163179您的評論示例是'int *'爲'double *' - 在C中沒有定義的行爲。這個好的答案從'malloc()'到'char *'做了一個'void *' - 這沒問題。 – chux