В чем разница между NULL, '\ 0' и 0

В C, кажется, есть различия между различными значениями нуля -,NULLNUL а также .0

Я знаю, что символ ASCII'0' оценивает48 или же .0x30

NULL указатель обычно определяется как:

#define NULL 0

Или же

#define NULL (void *)0

Кроме того, естьNUL персонаж'\0' который, кажется, оценивает0 также.

Есть ли случаи, когда эти три значения не могут быть равны?

Это также верно для 64-битных систем?