Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Bob1098 en 7 Agosto 2014, 11:27 am



Título: Una duda muy simple
Publicado por: Bob1098 en 7 Agosto 2014, 11:27 am
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 :)


Título: Re:
Publicado por: ivancea96 en 7 Agosto 2014, 11:49 am
Está solo disponible dentro del bucle, y al salir de él, se libera la memoria. Igual que dn una función.


Título: Re: Una duda muy simple
Publicado por: eferion en 7 Agosto 2014, 12:05 pm
Código
  1. for ( int i=0; i < 10; i++ )
  2. {
  3.  int valor = i + 1;
  4.  std::cout << valor << std::endl;
  5. }

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.


Título: Re: Una duda muy simple
Publicado por: Bob1098 en 8 Agosto 2014, 16:08 pm
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.


Título: Re: Una duda muy simple
Publicado por: 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
  1. int main(){
  2.    int a=0;
  3.    {
  4.        int b=0;
  5.    }
  6. }

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


Título: Re: Una duda muy simple
Publicado por: Bob1098 en 8 Agosto 2014, 18:54 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
  1. int main(){
  2.    int a=0;
  3.    {
  4.        int b=0;
  5.    }
  6. }

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 :)