1. Introducción

1.1. Inicialización de un arreglo

Los arrays pueden ser inicializados junto con la declaración.

Por ejemplo:

  1. float R[10] = {2, 32, 4.6, 2, 1, 0.5, 3, 8, 0, 12};
  2. float S[] = {2, 32, 4.6, 2, 1, 0.5, 3, 8, 0, 12};
  3. int N[] = {1, 2, 3, 6};
  4. int M[][3] = { 213, 32, 32, 32, 43, 32, 3, 43, 21};
  5. char Mensaje[] = "Error de lectura";
  6. char Saludo[] = {'H', 'o', 'l', 'a', 0};
  7. int y[5] = {1,2,3};
  8. int z [5] = { };

En estos casos no es obligatorio especificar el tamaño para la primera dimensión, como ocurre en los ejemplos de las líneas 2, 3, 4, 5 y 6.
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.
En el caso 5, el número de elementos es 17, 16 caracteres más el cero de fin de cadena.
En el ejemplo 6 el último elemento suministrado no es el carácter cero, sino que es el carácter nulo.
Si se suministran menos datos que el tamaño del arreglo, se comenzará a asignar desde el índice 0 (1er elemento), las posiciones restantes se inicializan en 0. Por ello el ejemplo 7 contendrá: 1,2,3,0,0.
Y el caso 8 será un arreglo inicializado con todos sus elementos en 0.

Esta forma de inicializar utilizando llaves {} solo es válida al momento de declarar el arreglo. Posteriormente solo será posible asignar valores de a una posición por vez.

Veamos unos ejemplos de declaración de arreglos.

#include <iostream>
using namespace std;
int main(int argc, char **argv){
    float arreglo_uno[]; //esto acusa error: NO hay dimensión ni valores
    float arreglo_dos[5]; // esto define un arreglo de dimensión 5 pero NO está inicializado
    cout<<arreglo_dos[3]; //muestra "basura" porque no está inicializado
    float arreglo_tres[]={1.0,2.0,3.0}; //Define e inicializa un arreglo.
                                        //La dimensión surge de la cantidad de elementos
    float arreglo_cuatro[6]={} //define un arreglo de dimensión 6 e inicializa todos los elementos en 0
    char texto[]="esta forma es ideal cuando no sé la cantidad de elementos";
    return 0;
}

Si intentamos compilar este código la línea 4 tiraría el siguiente error:

Si comentamos la línea 4 y corremos el código, veremos que el valor que se muestra como resultado de la ejecución de la línea 7 sería incoherente.. o lo que conocemos como BASURA.

Se pide al alumno razonar y justificar que sucedería se agrego antes de la línea 12 la siguiente línea:

Veamos como definir y cargar una matriz de 2 x 2:

#include <iostream>
using namespace std;
int main(int argc, char **argv){
    float matriz[2][2]; //esto define un arreglo bidimensional de 2x2 que NO está inicializado
    cout<<"ingrese elemento fila 1 columna 1: ";
    cin>>matriz[0][0];
    cout<<"ingrese elemento fila 1 columna 2: ";
    cin>>matriz[0][1];
    cout<<"ingrese elemento fila 2 columna 1: ";
    cin>>matriz[1][0];
    cout<<"ingrese elemento fila 2 columna 2: ";
    cin>>matriz[1][1];
    //cout<<matriz;
    //cout<<matriz[];
    return 0;
}


Se pide al alumno:

  • Descomentar la línea 13 y compilar y ver que sucede. Ver si puede justificar
  • Descomentar la línea 14 y compilar y ver que sucede. Ver si puede justificar
  • ¿Como se puede mostrar la matriz?