4 ms·
By the standard, the null pointer must be equivalent to 0.
by andrewshadura 8y ago
By the standard, the null pointer must be equivalent to 0.
- yuubi 8y agoOnly if you use conversion within the language: void *p=0; If you said memset(&p, 0, sizeof(p)) then that's not guaranteed to work on all implementations.
- uryga 8y agogizmo686's comment [1] explains the subtle difference: > [...] The technicality of the memset example is that it does not set the bits of the pointer by referring to it as a pointer, so the requirement that 0 behave as if it was a null pointer does not apply. [1] https://news.ycombinator.com/item?id=19767316 https://news.ycombinator.com/item?id=19767316
- deleted 8y ago[deleted]
- nybble41 8y agoThe memory representation of the null pointer is implementation-defined. The C99 standard only guarantees that a integer constant expression with the value 0, implicitly or explicitly cast to a pointer type, will give a null pointer. It does not guarantee that a null pointer cast to an integer type (other than _Bool) will give the value 0; all pointer-to-integer casts are implementation-defined. It also does not guarantee that a non-constant expression which evaluates to 0 will produce a null pointer if cast to a pointer type. In short, there may exist counter-intuitive but nonetheless standards-compliant platforms where tests such as "assert((uintptr_t)(void * )0 == 0);" or "int x = 0; assert((void * )x == (void * )0);" would fail.