significado - ¿Qué sucede con las variables no inicializadas? C++
que es declaracion de variables (3)
int main()
{
int a;
cout << a;
return 0;
}
Me pregunto por qué se está produciendo el valor 0. Pensé que si una variable no se inicializa, generaría un valor de basura.
Sin embargo, también recuerdo haber escuchado que el valor predeterminado de un entero es 0, así que estoy un poco confundido.
Gracias
Creo que no está convencido con las respuestas / comentarios, puede probar el siguiente código:
#include <iostream>
using namespace std;
int main(){
int a,b,c,d,e,f,g,h,i,j;
cout<<a<<endl;
cout<<b<<endl;
cout<<c<<endl;
cout<<d<<endl;
cout<<e<<endl;
cout<<f<<endl;
cout<<g<<endl;
cout<<h<<endl;
cout<<i<<endl;
cout<<j<<endl;
return 0;
}
Bueno, la razón es que una variable obtiene un valor de basura (un valor desconocido / sin sentido para programar) cuando alguien ejecuta un programa, se carga en alguna parte de la RAM. Ahora todo depende de qué valores se hayan establecido previamente en cierta ubicación, puede haber algún otro programa que haya estado anteriormente. Simplemente sucede que su programa se ha cargado en una ubicación donde tiene 0 valor en RAM y eso es lo que recibirá a cambio.
Es muy posible que si reinicias tu sistema e intentas ejecutar el mismo programa, entonces puedas obtener un valor de basura.
Las sentencias anteriores son válidas para las variables que el iniciador no inicializa.
El comportamiento predeterminado de un entero de alcance de función no inicializada (es decir, local) en C ++ es que sea indeterminado , lo que está bien; sin embargo, si ese valor se usa antes de que se defina, introduce un comportamiento indefinido y podría pasar cualquier cosa: los demonios podrían salir volando de tu nariz .
Esta página en cppreference proporciona ejemplos de comportamiento de entero por defecto.
Por otro lado, todas las variables locales no locales, no solo enteros, se inicializan en cero . Pero este caso no se incluyó en su ejemplo original.
(Nota al margen: generalmente se considera una buena práctica simplemente inicializar las variables de todos modos y evitar los riesgos potenciales por completo ... Especialmente en forma de variables globales ).
Existen excepciones a las mejores prácticas al usar variables globales en casos especiales raros, como algunos sistemas integrados; que inicializa los valores basados en las lecturas del sensor al inicio, o durante la iteración inicial del bucle ... Y necesita retener un valor una vez que finaliza el alcance de su bucle.