2014-08-28 101 views
2
#include <stdio.h> 
int main() 
{ 
    int a = 10; 
    void *p = &a; 
    int *ptr = p; // the error occurs here (cannot convert from 'void' to 'int') 
    printf("%u",*ptr); 
    return 0; 
} 

錯誤如上所述。 爲什麼會發生錯誤? 是否因爲初始化是在指針被聲明爲void的同時完成的?指針 - '初始化':不能從'void'轉換爲'int'

+3

這是因爲你試圖將C編譯爲C++。 ;) – mafso 2014-08-28 14:23:09

+0

但是,如果我改變: void * p =&a; into int * p =&a 它的工作原理... – 2014-08-28 14:25:51

+3

VS sxxcks ... ;-) – alk 2014-08-28 14:26:42

回答

3

這是有效的C但無效的C++。 (C++不隱式地從void*投:這就是爲什麼你會看到很多不必要的鑄件在malloc由C++程序員編寫的C代碼!)

在MSVC,文件重命名爲具有擴展.c一切都會很好:MSVC爲該擴展調用一個C編譯器。

+0

我懷疑它會。 – alk 2014-08-28 14:28:10

+0

把啤酒放在上面? – Bathsheba 2014-08-28 14:28:28

+0

夠公平的,但我懷疑它至少會讓編輯們看到那些有趣的閱讀蛇...... ;-) – alk 2014-08-28 14:29:19