[C con Clase] Variables

Steven Davidson steven en conclase.net
Lun Dic 18 09:35:34 CET 2006


Hola Abel,

El pasado 2006-12-18 06:20:09, Abel escribió:
 
A> Hola a todos,
A>   tengo una pregunta general: Cuál es la diferencia cuando declaro una variable de las siguientes formas:
A>   1:   POINT punto[4]={...............};
A>        main( )
A>          {
A>            ..........
A>          }
A>   2:   main ( )
A>         {
A>         for( int i=0;i<=9;i++) POINT punto[4]={...............};
A>         .................
A>         }
A>   ocurre que en la segunda forma estoy reservando más memoria para la variable punto?, osea yo entendería que punto[4] lo estoy declarando diez veces. Ó sucede que cada vez que termina el bucle for, la variable punto[4] se redeclara y de esa forma no se pierde memoria.

Has declarado 'punto' bajo el ámbito del bucle 'for'. Por lo tanto, tal variable se creará cada vez que se entre a tal ámbito y se destruirá cada vez que se termine el ámbito.

Contestando a tus inquietudes, en este código, estarás creando y destruyendo la variable 'punto' en cada iteración o pasada en el bucle 'for'. En cuanto a la memoria, eso ya es cuestión del compilador y posiblemente del sistema operativo. Esto quiere decirse que las creaciones de la variable pueden o no usar la misma memoria. Un compilador "inteligente" puede decidir usar la misma memoria para las diferentes "versiones" de tal variable, mientras que otro compilador puede no hacerlo.

Si no quieres perder la memoria, pero quieres que la declaración se realice dentro del bucle 'for', entonces puedes indicar 'static' para tal variable. Esto es,

for( ... )
{
  static POINT punto[4] = {...};
  ...
}

Con esto, 'punto' se creará y se inicializará una sola vez en la primera iteración del bucle 'for', pero no será destruida al terminar este ámbito.


Espero haber aclarado las dudas.

Steven


Más información sobre la lista de distribución Cconclase