Un array es una colección finita de datos del mismo tipo, que se almacenan en posiciones consecutivas de memoria y reciben un nombre común.
Ejemplo de array: Supongamos que queremos guardar las notas de los 20 alumnos de una clase. Para ello utilizaremos un array de 20 elementos y en cada elemento almacenaremos una nota.
Podemos representar gráficamente el array de notas de la siguiente forma:
Array notas:

Para acceder a cada elemento del array se utiliza el nombre del array y uno o más  índices que indican la posición que ocupa el elemento dentro del array. Cada índice se escribe entre corchetes.
El primer elemento del array ocupa la posición 0, el segundo la posición 1, etc. En un array de N elementos el último ocupará la posición N-1.
En el ejemplo anterior, notas[0]  contiene la nota del primer alumno  y notas[19] contiene la del último
Cómo declarar un array:
Un array se declara de forma parecida a una variable de tipo simple añadiéndole al nombre el número de elementos que contendrá el array.
De forma general, un array se declara así:
tipo_dato  nombre_array[elementos1][elementos2]…..;
elementos1, elementos2, etc. son los índices del array. Deben ser números enteros positivos o expresiones con un resultado entero positivo. Indican el número de elementos del array.
En el ejemplo anterior, el array notas se declara como:
double notas[20];
El array es unidimensional, se llama notas y contiene 20 elementos de tipo double.
Más ejemplos de declaración de arrays:
int ventas[10] ;  //array llamado ventas que contiene 10 enteros
double grados[20]; //array grados que contiene 20 elementos de tipo double
float precios[30]; //array llamado precios que contiene 30 elementos de tipo float
El número de índices determina la dimensión del array. Si el array tiene solo un índice es un array de una dimensión o unidimensional (también llamado vector), si tiene dos índices es un array de dos dimensiones o bidimensional (también llamados matrices, tablas o arreglos), si tienen tres índice tridimensional, etc.
Para facilitar la modificación del programa, el tamaño del array se puede declarar utilizando una constante en lugar de una cantidad entera. Esto hace más fácil modificar el programa ya que todas las referencias al tamaño máximo del array (por ejemplo, en bucles for o en definiciones de arrays) pueden ser modificadas cambiando el valor de la constante.
Por ejemplo, declaración de 4 arrays A, B, C y D de 10 elementos cada uno de tipo double usando una constante llamada ELEMENTOS:
const int ELEMENTOS = 10;
double A[ELEMENTOS], B[ELEMENTOS], C[ELEMENTOS], D[ELEMENTOS];
En este caso si se modifica el tamaño de los arrays, solo habrá que cambiar el valor de la constante.
Los arrays declarados como locales en una función tienen como valores iniciales valores indeterminados, como ocurre con las variables locales.
La declaración de un array puede incluir la asignación de valores iniciales.
La forma general de hacerlo es:
tipo nombre_array[tamaño]={valor1,valor2,..,valorn};
Donde valor1 es el valor del primer elemento del array, valor2 el valor del segundo elemento, y así sucesivamente.
El tamaño del array es opcional cuando se asignan valores iniciales en la declaración.
Todos los elementos del array que no tienen asignados valores iniciales explícitos, (sucede cuando un array tienes más elementos que valores iniciales se han asignado), serán puestos automáticamente a cero.


Ejemplos de asignación de valores iniciales en la declaración de un array en C++:
double porcentaje[]={0, 0.3, 7.25, 4.2};
Se declara un array unidimensional llamado porcentaje que contiene 4 elementos de tipo double. El número de elementos no es necesario indicarlo porque se están asignando4 valores iniciales. El compilador asume que el array tiene 4 elementos.
int numeros[5]= {1,4,-7,5,9};
Se declara un array unidimensional llamado numeros que contiene 5 elementos de tipo int. Se indica el número de elementos aunque no es necesario hacerlo. Se están asignando 5 valores iniciales. El compilador asume que el array tiene 5 elementos.
int digitos[8]= {3,4,2,7};
Se declara un array unidimensional llamado digitos que contiene 8 elementos de tipo int. Aquí sí es necesario indicar el número de elementos del array porque solo se le asignan valores iniciales a los cuatro primeros. El compilador asumiría que el array tiene solo 4 elementos. En este caso los cuatro últimos elementos del array que no reciben valores iniciales, toman el valor 0.
digitos[0]=3, digitos[1]=4, digitos[2]=2, digitos[3]=7,
digitos[4]=0, digitos[5]=0, digitos[6]=0, digitos[7]=0
Las declaraciones de arrays que hemos hecho hasta ahora se llaman declaraciones implícitaspara cada array que se declara hay que indicar el tipo y la dimensión.
Una alternativa a esto es definir un nuevo tipo de dato para el array asignándole un nombre, y posteriormente declarar las variables como pertenecientes a ese tipo.
C++ dispone del especificador typedef que permite la creación de nuevos tipos de datos.
Los tipos de datos creados con typedef son sinónimos de otros tipos ya existentes.
Por ejemplo, la siguiente instrucción crea un nuevo tipo de dato llamado entero, sinónimo de int.
typedef int entero;   
A partir de esta instrucción podemos declarar variables enteras así:
entero a, b=3;                
Utilizando typedef podemos crear nuevos tipos de datos sinónimos de tipos array. La forma general de hacerlo es:
typedef tipo_base nombre_nuevo_tipo[dimension];
Ejemplo:
typedef int Tvector[30];
Esta instrucción crea un nuevo tipo de dato llamado Tvector. Las variables que se declaren de este tipo serán arrays de 30 enteros.
Por ejemplo:
Tvector a, b;
Se han declarado a y b de tipo Tvector; a y b son dos arrays de 30 enteros.
Ejemplos de arrays es C++:
Ejemplo 1: programa C++ que accede y modifica los elementos de un array
Los elementos de un array se pueden utilizar igual que cualquier otra variable y se puede hacer con ellos las mismas operaciones que se pueden hacer con el resto de variables.
#include <iostream>
using namespace std;
int main ()
{
    int n, m = 5;
    int a[]={2,8,3,0,4}; //se declara un array de 5 elementos de tipo
                         //int con esos valores iniciales
    n = a[0];       //n = 2
    a[0]=a[1]+a[2]; //a[0]= 8 + 3 = 11
    a[1]++;         //a[1]= 9
    a[n]=m+10;      //a[2]= 15
    a[n+1]=7;       //a[3]= 7
    if(a[0]>=a[1])  //if(11 >= 9)
       a[4]=a[0];   //   a[4]= 11
    cout << a[0]<<" "<< a[1]<< " "<< a[2]<< " "<< a[3]<< " "<< a[4];
    cout << endl;
    system("pause");
}
La salida de este programa es:
11 9 15 7 11
Si se intenta acceder a un elemento que está fuera de los límites del array (un elemento con índice negativo o con un valor del índice mayor que el que corresponde al último elemento del array) el compilador no avisa del error. El error se producirá durante la ejecución si esa posición de memoria que se intenta acceder está fuera de la zona de memoria asignada al programa.
Es responsabilidad del programador comprobar que los valores de los índices utilizados en los accesos a los elementos del array están dentro de los límites del array.
Ejemplo 2: recorrer un array
Para recorrer un array se utiliza una instrucción iterativa (normalmente una instrucción for) utilizando una variable entera como índice que tomará valores desde el primer elemento al último o desde el último al primero.
El siguiente programa declara un array de 7 elementos de tipo double llamado notas y le asigna valores iniciales. A continuación recorre el array, utilizando la instrucción for, para mostrar por pantalla el contenido del array.
#include <iostream>
#include <iomanip>
using namespace std;
int main ()
{
  int i;
  double notas[]={2.3,8.5,3.2,9.5,4,5.5,7.0}; //array de 7 elementos
  cout << fixed << setprecision(2);
  for(i=0; i<7; i++)
      cout << notas[i] << " "; //se muestra cada elemento del array
  cout << endl;
  system("pause");
}
La salida que muestra este programa es:
2.30 8.50 3.20 9.50 4.00 5.50 7.00
Ejemplo 3: Recorrido de un array. Programa C++ que lee por teclado la nota de los alumnos de una clase y calcula la nota media del grupo. También muestra los alumnos con notas superiores a la media.
Este programa declara un array de elementos de tipo float que contendrá las notas de los alumnos.
Se realizan 3 recorridos sobre el array, el primero para asignar a cada elemento las notas introducidas por teclado, el segundo para sumarlas y el tercero para mostrar los alumnos con notas superiores a la media.
#include <iostream>
#include <iomanip>
using namespace std;
int main ()
{
    float notas[20];   //array de NUMALUM elementos tipo float
    int i = 0;           
    float suma = 0, media;  

    // Entrada de datos. Se asigna a cada elemento del array
    // la nota introducida por teclado
    for (i=0; i<20; i++)
    {
        cout << "Alumno " << i+1 << " Nota final: ";
        cin >> notas[i];
    }

    // Sumar todas las notas
    for (i=0; i<20; i++)
         suma = suma + notas[i];

    // Calcular la media
    media = suma / 20;

    // Mostrar la media
    cout << fixed << setprecision(2);
    cout << endl<< endl << "Nota media del curso: " << media << endl;
   
    // Mostrar los valores superiores a la media
    cout << "Listado de notas superiores a la media" << endl;
    cout << "--------------------------------------" << endl;
    for (i=0; i<20; i++)
        if (notas[i] > media)
        {
            cout << "Alumno numero " << setw(3) << i+1;
            cout << " Nota final: " << notas[i] << endl;
        }
    cout << endl;
    system("pause");
}