arreglos
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
| arreglos [2012/08/03 15:50] – [Arreglos globales] lmateu | arreglos [2016/09/27 13:02] (actual) – [Arreglos globales] lmateu | ||
|---|---|---|---|
| Línea 1: | Línea 1: | ||
| ===== Arreglos ===== | ===== Arreglos ===== | ||
| - | En realidad C no posee verdaderos arreglos como ocurre en Java. En C un arreglo de n elementos de un tipo T corresponde a un puntero al comienzo de un área de memoria que contiene n variables consecutivas de tipo T. De modo que lo que se vió en el capítulo sobre punteros es el 90% de lo que se puede escribir sobre arreglos. | + | En realidad C no posee verdaderos arreglos como los de Java. En C un arreglo de n elementos de un tipo T corresponde a un puntero al comienzo de un área de memoria que contiene n variables consecutivas de tipo T. De modo que lo que se vió en el capítulo sobre punteros es el 90% de lo que se puede escribir sobre arreglos. |
| - | El otro 10% corresponde la declaración de arreglos de tamaño constante. | + | El otro 10% corresponde |
| ==== Arreglos globales ==== | ==== Arreglos globales ==== | ||
| Línea 23: | Línea 23: | ||
| </ | </ | ||
| - | El primero es un arreglo de 100 elementos inicializados por omisión en 0. El tipo de la expresión //a// es //double*// y corresponde a la dirección del primer elemento de un área de memoria global con espacio para 100 variables consecutivas de tipo double. | + | El primero es un arreglo de 100 elementos inicializados por omisión en 0. El tipo de la expresión //a// es //double*// y corresponde a la dirección del primer elemento de un área de memoria global con espacio para 100 variables consecutivas de tipo double. |
| En este caso //a// **no es una variable**. | En este caso //a// **no es una variable**. | ||
| Línea 29: | Línea 29: | ||
| a= (double*)malloc(100*sizeof(double)); | a= (double*)malloc(100*sizeof(double)); | ||
| | | ||
| - | En este caso el identificador //a// representa una constante | + | En este caso el identificador //a// representa una constante |
| - | El arreglo b corresponde a un arreglo de 4 elementos preinicializados con constantes conocidas en tiempo de compilación. | + | {{ : |
| + | |||
| + | Volviendo al código de arriba, el arreglo b corresponde a un arreglo de 4 elementos preinicializados con constantes conocidas en tiempo de compilación. | ||
| Nótese que el compilador no genera ningún código para inicializar los arreglos globales. | Nótese que el compilador no genera ningún código para inicializar los arreglos globales. | ||
| + | |||
| + | === Inicialización de punteros globales === | ||
| + | |||
| + | Las siguientes declaraciones globales son válidas: | ||
| + | |||
| + | < | ||
| + | int x, y; | ||
| + | int *p= &x; | ||
| + | int *q[]= {&x, &y}; | ||
| + | </ | ||
| + | |||
| + | En este caso //&x// y //&y// se considera constantes. | ||
| ==== Arreglos automáticos ==== | ==== Arreglos automáticos ==== | ||
| - | También es posible declarar un arreglo local a una función. | + | También es posible declarar un arreglo local a una función. |
| < | < | ||
| Línea 55: | 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. | 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. | ||
| - | Observe aquí como se usa el arreglo en donde corresponde usar un puntero. | + | Observe aquí como se usa el arreglo en donde corresponde usar un puntero. |
| === Arreglos locales preinicializados === | === Arreglos locales preinicializados === | ||
| Línea 83: | Línea 97: | ||
| </ | </ | ||
| - | Compíle | + | Compile |
| % gcc -m32 loop.c | % gcc -m32 loop.c | ||
| Línea 99: | 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 < | + | |
| - | 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" | + | |
| - | This GDB was configured as " | + | |
| - | For bug reporting instructions, | + | |
| - | < | + | |
| Reading symbols from / | Reading symbols from / | ||
| (gdb) b main | (gdb) b main | ||
| Línea 139: | Línea 146: | ||
| </ | </ | ||
| - | Continúe así hasta que i tome el valor 10. | + | Continúe así hasta que i tome el valor 10. |
| + | |||
| + | ==== 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. | ||
arreglos.1344009033.txt.gz · Última modificación: por lmateu
