3 ms·
But in C, a 0 in a pointer context is always considered the NULL pointer (even if the physical value of a NULL pointer isn't all zeros).
by spc476 12y ago
But in C, a 0 in a pointer context is always considered the NULL pointer (even if the physical value of a NULL pointer isn't all zeros).
- loup-vaillant 12y agoAdditionally in a boolean context a null pointer is indistinguishable from "false" (meaning, zero). http://c-faq.com/null/ptrtest.html http://c-faq.com/null/ptrtest.html For practical purposes, the null pointer and the integer `0` are one and same.
- dllthomas 12y ago"For practical purposes, the null pointer and the integer `0` are one and same." For most practical purposes, which is why I said that it wasn't a terrible approximation. However, they can be distinguished on some architectures: intptr_t x = 0; void *p = 0; x == *(intptr_t*)(char*)&p; I can easily construct fantasy scenarios (involving more than a bit of Doing It Wrong) where this would be relevant. I'm not convinced it couldn't ever be relevant without Doing It Wrong, if one in fact needed to work on that kind of a system.
- cperciva 12y agoOnly a compile-time constant zero. So assert(NULL == (void *)0); is fine, but int x = 0; assert(NULL == (void *)x); is not.