¿Por qué mi char * se puede escribir y, a veces, solo se lee en C ++?

He tenido grandes problemas para entender elchar* últimamente. Digamos que hice una función recursiva para revertir unchar* pero dependiendo de cómo lo inicializo, obtengo algunas violaciones de acceso, y en mi manual de C ++ no encontré nada que me diera el camino correcto para entender, así que estoy buscando su ayuda.

CASO 1 Primer caso en el que obtuve una infracción de acceso al intentar intercambiar letras:

char * bob = "hello";

CASO 2 Entonces intenté esto para que funcione

char * bob = new char[5];
bob[0] = 'h';
bob[1] = 'e';
bob[2] = 'l';
bob[3] = 'l';
bob[4] = 'o';

CASO 3 Pero luego, cuando hice un truco, obtuve un poco de basura al final, así que lo cambié por

char * bob = new char[6];
bob[0] = 'h';
bob[1] = 'e';
bob[2] = 'l';
bob[3] = 'l';
bob[4] = 'o';
bob[5] = '\0';

CASO 4 Eso funcionó, así que me dije a mí mismo por qué no funcionaría entonces

 char * bob = new char[6];
 bob = "hello\0";

CASO 5 y falló, también he leído en alguna parte que podrías hacer algo como

char* bob[];

Luego agrega algo a eso. Mi pregunta es ¿por qué algunos fallan y otros no, y cuál es la mejor manera de hacerlo?

Respuestas a la pregunta(4)

Su respuesta a la pregunta