Cela peut sembler étrange, mais en C (size_t) (void *) 0 == 0 n'est pas garanti par la spécification du langage. Les compilateurs peuvent utiliser n'importe quelle valeur pour null (bien qu'ils utilisent presque toujours 0.)Y at-il une différence entre null et 0 lors de l'affectation à des pointeurs dans un code dangereux?
En C#, vous pouvez assigner null ou (T *) 0 à un pointeur dans un code non sécurisé.
- Y a-t-il une différence?
- (long) (void *) 0 == 0 (garanti ou non d'autres termes: IntPtr.Zero.ToInt64() == 0)
MSDN a ceci à dire au sujet de IntPtr. Zéro:
"La valeur de ce champ n'est pas équivalente à null." Eh bien, si vous voulez être compatible avec le code C, cela a beaucoup de sens - cela ne servirait à rien si l'interopérabilité n'était pas convertie en un pointeur C null. Mais je veux savoir si IntPtr.Zero.ToInt64() == 0 qui peut être possible, même si IntPtr.Zero interne est une autre valeur (le CLR peut ou ne peut pas convertir null à 0 dans l'opération de distribution)
Pas un doublon de this question
Ah oui, j'ai oublié que par défaut fonctionne sur les pointeurs. C'est une bonne solution. – Eloff