Documente Academic
Documente Profesional
Documente Cultură
Las estructuras estáticas son aquellos en las que el espacio ocupado en memoria se
define en tiempo de compilación y no puede ser modificado durante la ejecución del
programa; por el contrario, en las estructuras de datos dinámicas el espacio ocupado en
memoria puede ser modificado en tiempo de ejecución.
Las estructuras estáticas denominadas arreglos, las podemos definir como la colección de
datos del mismo tipo, que se almacenan en posiciones consecutivas de memoria y
reciben un nombre común. Para referirse a un determinado elemento de un arreglo se
deberá utilizar un índice, que especifique la posición relativa en el arreglo. Los arreglos
pueden ser:
Unidimensional
Bidimensionales
Posición contenido
0 Elemento 0
1 Elemento 1 0 1 N
2 Elemento 2 0 Elemento 0,0 ………. Elemento 0,n
Tridimensional
ARREGLOS UNIDIMENSIONALES: VECTORES
DECLARACION
Por ejemplo, para declarar un arreglo de enteros llamado listanum con diez elementos se
hace de la siguiente forma:
int listanum[10];
En C, todos los arreglos usan cero como índice para el primer elemento. Por tanto, el
ejemplo anterior declara un arreglo de enteros con diez elementos desde listanum[0]
hasta listanum[9].
ACCESO
#include <stdio.h>
#include <conio.h>
main()
{
int hora;
/* Faltan los tres últimos elementos */
int temperaturas[24] = { 15, 18, 20, 23, 22, 24, 22, 25, 26, 25, 24,
22, 21, 20, 18, 17, 16, 17, 15, 14, 14, 13, 13, 12 };
Vemos que a partir del elemento 24 (incluído) tenemos resultados extraños. Esto es
porque nos hemos salido de los límites del arreglo e intenta acceder al elemento
temperaturas[25] y sucesivos que no existen. Así que nos muestra el contenido de la
memoria que está justo detrás de temperaturas[23] (esto es lo más probable) que puede
ser cualquiera. Al contrario que otros lenguajes C no comprueba los límites de los arreglo.
Este programa no da error al compilar ni al ejecutar, tan sólo devuelve resultados
extraños. Tampoco bloqueará el sistema porque no estamos escribiendo en la memoria
sino leyendo de ella.
Otra cosa muy diferente es meter datos en elementos que no existen. Veamos un ejemplo
(ni se te ocurra ejecutarlo):
#include <stdio.h>
#include <conio.h>
main()
{
int temp[24];
float media = 0;
int hora;
El nombre de un arreglo se puede usar como argumento de una función, permitiendo así
que el arreglo completo sea pasado a la función. Sin embargo la manera en que se pasa
difiere mucho de la de una variable ordinaria.
Para pasar un arreglo a una función, el nombre del arreglo debe aparecer sólo, sin
corchetes o índices, como un argumento actual dentro de la llamada a la función. El
correspondiente argumento formal se escribe de la misma manera, pero debe ser
declarado como un arreglo dentro de la declaración de argumentos formales. Cuando se
declara un arreglo unidimensional como un argumento formal, el arreglo se escribe con un
par de corchetes vacíos.
Hemos visto que los argumentos son pasados a la función por valor cuando los
argumentos son variables ordinarias. Sin embargo, cuando se pasa un arreglo a una
función, los valores de los elementos del arreglo no son pasados a la función. En vez de
esto, el nombre del arreglo se interpreta como la dirección del primer elemento del arreglo
(puntero del arreglo). Los argumentos pasados de esta forma se dicen que son pasados
por referencia en vez de por valor. Por tanto, si un elemento del arreglo es alterado dentro
de la función, esta alteración será reconocida en todo el ámbito de definición del arreglo.
#include <stdio.h>
#include <conio.h>
suma = 0;
for( i=0; i<10; i++ )
{
suma += m[i];
}
return suma;
}
main()
{
int contador;
int matriz[10] = { 10, 11, 13, 10, 14, 9, 10, 18, 10, 10 };
Este programa tiene alguna cosita adicional como que muestra toda la matriz en una
columna. Además se usa para imprimir los números %3d. El 3 indica que se tienen que
alinear los números a la derecha, así queda más elegante.