Lo indicado esta casi bien.
Es cierto que "hola" es un string constante y como tal no se puede modificar, pero al inicializar un arreglo de caracteres con un string constante, el cargador hace la copia para ti, desde la zona constante hacia la variable, gratis.
El string constante existe, y la variable inicializada también. Son 2 entes independientes, usualmente guardados en zonas diferentes de memoria.
Mini.ejemplo:
Código C++:
Ver original#include <iostream>
using namespace std;
int main()
{
char h[] = "hola que tal";
cout << "ANTES : " << h << endl;
h[0] = 'c';
cout << "DESPUES : " << h << endl;
}
Verlo funcionando aqui:
http://goo.gl/rWQAy8