mental - como mejorar la concentracion y memoria
Alcance de las variables C (4)
El "Hello"
es un literal de cadena y existirá durante la vigencia del programa. Para citar las secciones relevantes del estándar C99:
- 6.4.5 Literales de cadenas
... La secuencia de caracteres multibyte se usa para inicializar una matriz de duración de almacenamiento estático y longitud suficiente para contener la secuencia ...
- 6.2.4 Duraciones de almacenamiento de los objetos
Un objeto cuyo identificador se declara con un enlace externo o interno, o con el especificador de clase de almacenamiento estático tiene una duración de almacenamiento estática . Su duración es la ejecución completa del programa y su valor almacenado se inicializa solo una vez, antes del inicio del programa.
El valor de retorno de la función debe ser const char*
ya que un intento de modificar una cadena literal es un comportamiento indefinido.
Posible duplicado:
¿Devolver una dirección literal de una función segura y portátil?
"Tiempo de vida" de cadena literal en C
Hola estoy algo confundido
char *func()
{
return "Hello";
}
Aquí "Hola" es secuencia / matriz de caracteres. Es una variable local y debe desaparecer tan pronto como la función regrese. Entonces, ¿por qué podemos obtener el valor correcto?
Es constante y tiene una dirección constante en la memoria.
La función destruye los valores solo después de devolver el control.
Entonces, en el momento en que se encuentra la declaración de retorno, se coloca el "Hola" para devolver el valor y luego la función destruye el alcance;
eche un vistazo a esto: ¿devolver una dirección literal de una función segura y portátil?
incluso si se eliminó la cadena (variable local o asignación dinámica con malloc () y libre ()), cuando devuelve un puntero, el valor puede ser correcto. pero, este es un comportamiento no definido.