NULL
ist nicht garantiert gleich 0 - der genaue Wert ist architekturabhängig. Die meisten wichtigen Architekturen definieren ihn als (void*)0
.
'\0'
ist immer gleich 0, denn so ist Byte 0 in einem Zeichenliteral kodiert.
Ich weiß nicht mehr, ob C-Compiler ASCII verwenden müssen - falls nicht, '0'
muss nicht immer gleich 48 sein. Unabhängig davon ist es unwahrscheinlich, dass Sie jemals auf ein System stoßen werden, das einen alternativen Zeichensatz wie EBCDIC verwendet, es sei denn, Sie arbeiten an sehr undurchsichtige Systeme.
Die Größen der verschiedenen Typen sind auf 64-Bit-Systemen unterschiedlich, aber die Ganzzahlwerte sind gleich.
Einige Kommentatoren haben Zweifel daran geäußert, dass NULL gleich 0 ist, aber nicht sein Null. Hier ist ein Beispielprogramm mit der erwarteten Ausgabe auf einem solchen System:
#include <stdio.h>
int main () {
size_t ii;
int *ptr = NULL;
unsigned long *null_value = (unsigned long *)&ptr;
if (NULL == 0) {
printf ("NULL == 0\n"); }
printf ("NULL = 0x");
for (ii = 0; ii < sizeof (ptr); ii++) {
printf ("%02X", null_value[ii]); }
printf ("\n");
return 0;
}
Dieses Programm kann drucken:
NULL == 0
NULL = 0x00000001