Por qué funciona con punteros:
Cuando dice char * str1
en C, se están asignando un puntero en la memoria. Cuando se escribe str1 = "Hello";
, que está creando una cadena literal en la memoria y hacer que el punto de puntero a ella. Cuando se crea otra cadena literal "new string"
y la asigna a str1
, todo lo que está haciendo es cambiante, donde el puntero.
Por qué no funciona con matrices:
Cuando dice char str2 [] = "Hello"
, que está creando una cadena literal y ponerlo en la matriz durante su definición. Está bien para no dar un tamaño, como la matriz calcula y añade un '\0'
a ella. No puede reasignar nada a esa matriz sin cambiar el tamaño. Es por eso que str2 = "four"
no funcionará.
En caso de str3
, es el mismo caso. No ha definido el tamaño de la matriz en la definición, por lo que calculó su tamaño en 0. No puede asignar nada nuevo sin cambiar el tamaño de la matriz.
[Esta pregunta] (http://stackoverflow.com/questions/164194) cubre el mismo terreno, simplemente redactado de manera diferente. No estoy seguro si esto se duplica lo suficiente para cerrar, pero las respuestas se aplican. –
@Tim Post: La supuesta pregunta duplicada y su respuesta son IMO no relacionadas con esta pregunta porque esta pregunta cosas de tiempo de compilación, la otra pregunta cosas de tiempo de ejecución –