7. ¿Cuál es la diferencia entre estas inicializaciones?
char
a[] = "string literal";
char *p = "string literal";
Me
da un error si intento asignar un valor a p[i];
Una
cadena de caracteres literal puede ser usado de dos maneras ligeramente
diferentes.
Por
un lado, como un valor para inicializar un array de caracteres
(es el caso de tu primera declaración). Esto especifica
los valores iniciales de los caracteres que hay en el array.
Por
otro lado, la cadena se convierte en un array de caracteres estático
y sin nombre, que pueden ser almacenados en la memoria sólo
para leer. Es por esto, por lo que seguramente no podrás
modificarlo.
Dado
que un array se puede considerar como un puntero, la cadena también
se puede considerar como un puntero, y por lo tanto puedes inicializar
p con ella. Sin embargo, el valor que realmente se estar asignando
a p, es un puntero al primer carácter de la cadena.
.