Sunteți pe pagina 1din 3

Arreglos, Arrays o Matrices en C

Los arrays permiten agrupar datos usando un mismo identificador. Todos los elementos de un array son del mismo tipo, y para acceder a cada elemento se usan ndices. La direccin ms baja corresponde al primer elemento y la ms alta al ltimo. Un arreglo puede tener una o varias dimensiones. Para acceder a un elemento en particular de un arreglo se usa un ndice. El formato para declarar un arreglo unidimensional es:

<tipo> <nombre_arr> [ <tamao1> ] [ <tamao2> ][<tamaoN>];

Ejemplo1: int vector[X]; Unidimensional de tipo entero. El ndice se representara de forma grafica tal y como

se ve en la figura de mas abajo. Como se puede observar solo necesitamos de un ndice (x) para acceder a cada elemento de la lista. Por ejemplo si quisiera rellenar la casilla 4 dndole el valor 10, solo tendra que poner: vector[4]=10;

El tamao en memoria que ocupa un array es siempre fijo y no puede variar. Para calcular el tamao en memoria que puede ocuparnos un array solo tenemos que multiplicar el nmero de elementos de nuestro array por el tamao en bytes del tipo de este. Es decir aplicaremos la siguiente frmula:

bytes totales = sizeof(tipo base) * nmero de elementos

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]. El ltimo elemento del arreglo siempre ser N-1. Los arrays pueden ser inicializados en la declaracin. Ejemplos2. Inicializacin de vrios arreglos:

float R[10] = {2, 32, 4.6, 2, 1, 0.5, 3, 8, 0, 12}; float S[] = {2, 32, 4.6, 2, 1, 0.5, 3, 8, 0, 12}; int N[] = {1, 2, 3, 6}; int M[][3] = { 213, 32, 32, 32, 43, 32, 3, 43, 21}; char Mensaje[] = "Error de lectura";

char Saludo[] = {'H', 'o', 'l', 'a', 0};

En estos casos no es obligatorio especificar el tamao para la primera dimensin, como ocurre en el ejemplo1. En estos casos la dimensin que queda indefinida se calcula a partir del nmero de elementos en la lista de valores iniciales. En el caso 2, el nmero de elementos es 10, ya que hay diez valores en la lista. En el caso 3, ser 4. En el caso 4, ser 3, ya que hay 9 valores, y la segunda dimensin es 3: 9/3=3. Y en el caso 5, el nmero de elementos es 17, 16 caracteres ms el cero de fin de cadena. Como advertencia para los lectores que han utilizado arreglos en otros lenguajes, sealar que quizs el aspecto ms significativo del manejo de matrices en C, es que el compilador desconoce su tamao, de forma que el programador debe adoptar precauciones para no salir de sus lmites, ya que el compilador permite referenciar elementos inexistentes, ms all del final de la matriz, con el consiguiente riesgo de error. En este captulo abordaremos todo lo necesario para manejarlas en C. Puede afirmarse que las matrices son un recurso de programacin simple y socorrido; en realidad pueden considerarse como las "estructuras" de datos ms simples que cabe imaginar (todos los elementos del mismo tipo). Presentan la ventaja de que sus elementos son rpidamente accesibles, en especial si utiliza punteros en vez de subndices, pero presentan una notable limitacin: son de tamao fijo; es preciso definir su tamao desde el principio y no pueden ser fcilmente incrementadas o disminuidas sino mediante complejos procesos de copia. Estas estructuras de datos son adecuadas para situaciones en las que el acceso a los datos se realice de forma aleatoria e impredecible. Por el contrario, si los elementos pueden estar ordenados y se va a utilizar acceso secuencial sera ms adecuado utilizar una lista. Las matrices C++ se consideran tipos complejos, y se alojan en zonas de memoria contiguas. El C++ Estndar ofrece en su biblioteca, alternativas interesantes a las matrices; en especial las clases vector, string (adaptada al manejo de cadenas de caracteres), list, deque y valarray. Esta ltima especialmente optimizada para el manejo de matrices numricas. Tambin se pueden inicializar los arreglos asignndole valores directamente a cada uno de sus elementos. Ejemplo3. Aqu vemos como podemos asignarle un valor a cada elemento por medio de un ciclo for

int v[5]; int i; for (i=0 ; i<5 ; i++) {

v[i] = 2*i; }
Ejemplo4: Aqu tenemos un ejemplo en C++ que utiliza un vector dinmico que hace prcticamente lo mismo.

#include <vector> vector<int> v; // Si no se especifica el tamao inicial es 0 for (int i=0 ; i<5 ; i++) { v.push_back(2*i); // inserta un elemento al final del vector }
Tener en cuenta que el nombre Vector solo hace referencia a los arreglos con un solo ndice o dimensin.

Mientras ms ndices o dimensiones tenga el arreglo, ms complejo se vuelve el acceso y la representacin de memoria.

S-ar putea să vă placă și