¿Cómo es que el terminador de cadena '\ 0' tiene el mismo valor que la constante entera 0?

Tengo el siguiente código -

#include <stdio.h>
#define LENGTH 5
int main(){
    char* ch[LENGTH] = {"Zero", "One", "Two", "Three", "Four"};
    char* pc;
    char** ppc;
    for(int i=0; i<LENGTH; i++){
        ppc = ch+i;
        pc = *ppc;
        while(*pc != 0){
            printf("%c ", *pc);
            pc = pc +1;
        }
        printf("\n");
    }
    return 0;
}

Es un ejemplo de indirección múltiple usando cadena.

La salida es

Z e r o 
O n e 
T w o 
T h r e e 
F o u r 

Aquí enwhile() bucle en lugar de*pc != '\0', *pc != 0 es usado

Pero ambos enfoques dan el mismo resultado. ¿Por que es esto entonces?

Respuestas a la pregunta(4)

Su respuesta a la pregunta