Esto puede parecer extraño, pero en C (size_t) (void *) 0 == 0 no está garantizado por la especificación del idioma. Los compiladores pueden usar cualquier valor que deseen para nulo (aunque casi siempre usan 0.)¿Hay alguna diferencia entre nulo y 0 al asignar punteros a un código inseguro?
En C#, puede asignar nulo o (T *) 0 a un puntero en código inseguro.
- ¿Hay alguna diferencia?
- (largo) (void *) 0 == 0 (garantizados o no dicho de otra manera:? IntPtr.Zero.ToInt64() == 0)
MSDN tiene esto que decir acerca de IntPtr. Cero:
"El valor de este campo no es equivalente a nulo". Bueno, si quieres ser compatible con el código C, tiene mucho sentido, sería inútil para la interoperabilidad si no se convirtiera en un puntero C nulo. Pero quiero saber si IntPtr.Zero.ToInt64() == 0 que puede ser posible, incluso si internamente IntPtr.Zero es algún otro valor (el CLR puede o no convertir nulo a 0 en la operación de conversión)
No es un duplicado de this question
Ah, sí, olvidé que el valor predeterminado funciona en los punteros. Esa es una buena solución. – Eloff