Una duda muy simple

Iniciado por Bob1098, 7 Agosto 2014, 11:27 AM

0 Miembros y 1 Visitante están viendo este tema.

Bob1098

Hola. Tengo una pregunta bastante simple, y es la siguiente:

Cuando declaro una variable (por ejemplo un int) en un bucle for, esa variable esta solo disponible dentro de este bucle, pero una vez acaba el bucle la variable se queda en la memoria? En ese caso si por ejemplo hacemos uso de varios bucles en un programa con varios "int", estamos consumiendo más memoria que si usamos solo un int para todos los bucles no?

Es una pregunta muy tonto, pero me gustaría saber la respuesta :)

ivancea96

Está solo disponible dentro del bucle, y al salir de él, se libera la memoria. Igual que dn una función.

eferion

Código (cpp) [Seleccionar]

for ( int i=0; i < 10; i++ )
{
  int valor = i + 1;
  std::cout << valor << std::endl;
}


En el ejemplo anterior hay dos variables, i y valor.


  • i existe de forma continuada durante toda la vida del bucle. Cuando el código sale del bucle la variable simplemente deja de existir y su memoria puede ser ocupada por otra variable... el mundo es así de cruel.
  • valor existe únicamente dentro de cada iteración del bucle, es decir, durante la ejecución de este ejemplo se van a crear 10 variables "valor". Cada una de estas instancias se eliminará al terminar la iteración correspondiente.

Fuera del bucle, por tanto, no existirá ninguna de estas dos variables. Si accedieses a las posiciones de memoria donde estaban ubicadas puede que aún se mantenga el último valor que tenían dichas variables... pero la memoria no está reservada y, por tanto, no está asegurado que puedas recuperar dicho valor.

Bob1098

Es decir, que resulta casi más practico utilizar vairables dentro del bucle que usar variables globales, me equivoco? Aunque en realidad se esta haciendo el mismo uso de memoria, pero he oído por ahí que es una costumbre muy mala usar variables globales si no es necesario. Gracias por las respuestas.

ivancea96

Simplemente, usa cada cosa en su momento.
Si sólo usarás el índice del bucle como contador DENTRO del bucle, pues se inicializa en el for. Si lo necesitas fuera, pues lo inicializas fuera.

Como dato, te digo que puedes hacer esto:

Código (cpp) [Seleccionar]
int main(){
    int a=0;
    {
        int b=0;
    }
}


Puedes poner cuando quieras un par de llaves. Las variables que haya dentro de las llaves, desaparecerán cuando se cierren.

Bob1098

Cita de: ivancea96 en  8 Agosto 2014, 16:51 PM
Simplemente, usa cada cosa en su momento.
Si sólo usarás el índice del bucle como contador DENTRO del bucle, pues se inicializa en el for. Si lo necesitas fuera, pues lo inicializas fuera.

Como dato, te digo que puedes hacer esto:

Código (cpp) [Seleccionar]
int main(){
    int a=0;
    {
        int b=0;
    }
}


Puedes poner cuando quieras un par de llaves. Las variables que haya dentro de las llaves, desaparecerán cuando se cierren.

Interesante, no sabia que se podía hacer eso. Supongo que ya he aprendido algo más sobre c++. Gracias por la respuesta :)