2017-08-03 44 views
4

下面的代碼編譯在C,但不是在C++:工程在C,但不是在C++

int *ptr = 25; //why not in C++? 

錯誤

prog.cpp: In function ‘int main()’: 
prog.cpp:6:11: error: invalid conversion from ‘int’ to ‘int*’ [-fpermissive] 
    int *ptr = 25; 

但這編譯在C和C++:

int *ptr = 0; //compiles in both 

爲什麼分配0工作正常,其他數字不起作用?

+1

到底是什麼錯誤? –

+5

因爲指針上下文中的'0'具有特殊含義。 –

+3

'0'是一個空指針常量; '25'不是有效的指針常量。第一個不應該在C中沒有警告的情況下進行編譯。 –

回答

6

因爲您不能在C++中隱式地從int轉換爲int*,但由於歷史原因,因爲它通常用作NULL的值,所以可以爲0。

如果你想做到這一點在C++中,你需要明確地投下數指針:

int *ptr = reinterpret_cast<int*>(25); 
+2

在'nullptr'到達之前,它並不經常用作'NULL'的值,0是C++中的官方值。 'NULL'來自C. – Slava

+0

好的謝謝!我會檢查出來的。 @Tommy Andersen – Chaitanya

+0

@Slava在C++實現中,將NULL定義爲0是常見的 - 其他值(在nullptr之前)可以具有哪些值? –

相關問題