Herramientas de usuario

Herramientas del sitio


arreglos

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
arreglos [2012/08/04 01:17] – [Arreglos globales] lmateuarreglos [2016/09/27 13:02] (actual) – [Arreglos globales] lmateu
Línea 47: Línea 47:
 </code> </code>
  
-En este caso //&x// y //&y// se considera constantes.  En realidad el compilador no puede determinar su valores pero a la larga sí se puede determinar esa dirección antes de comenzar la ejecución del programa.  Existen mecanismos especiales en el compilador y en el linker para poder dar un valor inicial correcto en este caso.+En este caso //&x// y //&y// se considera constantes.  En realidad el compilador no puede determinar sus valores pero a la larga sí se puede determinar esa dirección antes de comenzar la ejecución del programa.  Existen mecanismos especiales en el compilador y en el linker para poder dar un valor inicial correcto en este caso.
 ==== Arreglos automáticos ==== ==== Arreglos automáticos ====
  
-También es posible declarar un arreglo local a una función.  El tiempo de vida y alcance es el mismo de todas las variables automáticas.  Por ejemplo:+También es posible declarar un arreglo local a una función.  El tiempo de vida y alcance es el mismo de todas las variables automáticas.  Se ubican en la pila del proceso.  Por ejemplo:
  
 <code> <code>
Línea 69: Línea 69:
 Acá //a// es un arreglo de 20 elementos que es creado al inicio de f y destruidos en el retorno de f.  Cuidado, una función no debe retornar la dirección de un arreglo local.  Aunque se puede y C lo permite, como su espacio es reutilizado en nuevas invocaciones de funciones, el resultado es impredecible y casi siempre erróneo. Acá //a// es un arreglo de 20 elementos que es creado al inicio de f y destruidos en el retorno de f.  Cuidado, una función no debe retornar la dirección de un arreglo local.  Aunque se puede y C lo permite, como su espacio es reutilizado en nuevas invocaciones de funciones, el resultado es impredecible y casi siempre erróneo.
  
-Observe aquí como se usa el arreglo en donde corresponde usar un puntero.  Esto es legal porque //a// representa la dirección de un entero y por lo tanto se puede asignar al parámetro p en ordenar.+Observe aquí como se usa el arreglo en donde corresponde usar un puntero.  Esto es legal porque //a// representa la dirección de un entero, es decir su tipo es //int*// y por lo tanto se puede asignar al parámetro p de la función ordenar.
  
 === Arreglos locales preinicializados === === Arreglos locales preinicializados ===
Línea 97: Línea 97:
 </code> </code>
  
-Compíle y ejecute con:+Compile y ejecute con:
  
   % gcc -m32 loop.c   % gcc -m32 loop.c
Línea 113: Línea 113:
 % gdb a.out % gdb a.out
 GNU gdb (Gentoo 7.3.1 p2) 7.3.1 GNU gdb (Gentoo 7.3.1 p2) 7.3.1
-Copyright (C) 2011 Free Software Foundation, Inc. +...
-License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> +
-This is free software: you are free to change and redistribute it. +
-There is NO WARRANTY, to the extent permitted by law.  Type "show copying" +
-and "show warranty" for details. +
-This GDB was configured as "x86_64-pc-linux-gnu"+
-For bug reporting instructions, please see: +
-<http://bugs.gentoo.org/>...+
 Reading symbols from /u/i/lmateu/Test/a.out...done. Reading symbols from /u/i/lmateu/Test/a.out...done.
 (gdb) b main (gdb) b main
Línea 153: Línea 146:
 </code> </code>
  
-Continúe así hasta que i tome el valor 10.  Luego observe lo que sucede cuando se ejecuta la instrucción ''a[i]0''.+Continúe así hasta que i tome el valor 10.  Ejecute una iteración más.  ¿Qué valor toma la variable i
 + 
 +==== Arreglos dinámicos ==== 
 + 
 +Son todos los arreglos que se crean llamando a malloc y se destruyen explícitamente con free, como se vió en el capítulo sobre punteros. Por lo tanto se ubican en el heap.  Su valor inicial es indeterminado y por lo tanto deben ser inicializados por el programador despúes de su creación. 
 + 
 +Observe que Java no posee arreglos globales ni locales a una función.  Todos los arreglos de Java son dinámicos.
arreglos.1344043063.txt.gz · Última modificación: 2012/08/04 01:17 por lmateu