Otra diferencia:
s[0]='H';
s[1]='o';
s[2]='l';
s[3]='a';
s[4]='!';
/*
Si intento seguir metiendo valores en un array, éste no modifica su tamaño asi que estoy escribiendo
en un lugar no reservado y puedo crear un "leak"
Podria haber aumentado el tamaño declarado del array por ejemplo a 10, reservando asi espacio limpio
para la escritura
*/
//s[5]='!';
Duda:
Una cosa curiosa es que si dos arrays distintos los inicializas en el código con la misma cadena (sendas cadenas iguales), el compilador sólo guardará una cadena en memoria y los dos punteros apuntarán a ella. En cámbio, si haces lo mismo pero con arrays cada uno de ellos guardará su propia copia de la cadena, así gastará el doble de espacio.
Hay un typo creo... en una de las dos sentencias no hablas de un array.... en cual ?