Programacion en Java: Arrays o Matrices


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 dirección más baja corresponde al primer elemento y la más 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> [ <tamaño1> ] [ <tamaño2> ]…[<tamañoN>];

Ejemplo1:
int vector[X];    à Unidimensional de tipo entero. El índice se representaría 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 dándole el valor 10, solo tendría que poner: vector[4]=10;
El tamaño en memoria que ocupa un array es siempre fijo y no puede variar. Para calcular el tamaño en memoria que puede ocuparnos un array solo tenemos que multiplicar el número de elementos de nuestro array por el tamaño en bytes del tipo de este. Es decir aplicaremos la siguiente fórmula:


bytes totales = sizeof(tipo base) * número 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 declaración.
Ejemplos2. Inicialización de vários 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 tamaño para la primera dimensión, como ocurre en el ejemplo1. En estos casos la dimensión que queda indefinida se calcula a partir del número de elementos en la lista de valores iniciales.
En el caso 2, el número 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 dimensión es 3: 9/3=3.
Y en el caso 5, el número de elementos es 17, 16 caracteres más el cero de fin de cadena.
Como advertencia para los lectores que han utilizado arreglos en otros lenguajes, señalar que quizás el aspecto más significativo del manejo de matrices en C, es que el compilador desconoce su tamaño, de forma que el programador debe adoptar precauciones para no salir de sus límites, ya que el compilador permite referenciar elementos inexistentes, más allá del final de la matriz, con el consiguiente riesgo de error. En este capítulo abordaremos todo lo necesario para manejarlas en C.
Puede afirmarse que las matrices son un recurso de programación simple y socorrido; en realidad pueden considerarse como las "estructuras" de datos más simples que cabe imaginar (todos los elementos del mismo tipo). Presentan la ventaja de que sus elementos son rápidamente accesibles, en especial si utiliza punteros en vez de subíndices, pero presentan una notable limitación: son de tamaño fijo; es preciso definir su tamaño desde el principio y no pueden ser fácilmente 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 sería más adecuado utilizar una lista. 
Las matrices C++ se consideran tipos complejos, y se alojan en zonas de memoria contiguas. El C++ Estándar 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 numéricas.
También se pueden inicializar los arreglos asignándole 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 dinámico que hace prácticamente lo mismo.
#include <vector>
 
vector<int> v; // Si no se especifica el tamaño 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 dimensión.

Mientras más índices o dimensiones tenga el arreglo, más complejo se vuelve el acceso y la representación de memoria.