Vectores y matrices

Sintaxis

tipoDeDato nombreVector[tamañoDimension1][tamañoDimension2] ...;

Definición

Un vector y una matriz son colecciones de elementos del mismo tipo. Se pueden construir matrices de cualquier dimensión. Un vector se considera una matriz unidimensional. Una matriz bidimensional es un vector de vectores, extendiéndose esta propiedad a matrices con más dimensiones.

Es necesario destacar dos propiedades de los vectores y matrices en C:

Como consecuencia de la segunda propiedad no es posible asignar directamente un vector a otro.
Al definir una matriz se establece el tamaño de cada dimensión y no su límite. El rango de índices aceptables va desde 0 hasta el tamaño de la dimensión menos 1.
Para acceder a una posición en el vector o matriz se escribe el nombre y a continuación el índice entre corchetes para cada dimensión.

Información general sobre la creación en memoria dinámica de vectores y matrices se encuentra en uso de memoria dinámica con punteros, donde se incluye además un ejemplo de creación de matrices en memoria dinámica, ejemplos de creación de vectores en memoria dinámica se encuentran en la función malloc, el procedimiento free y en el operador sizeof.

Vectores dinámicos

C99 permite definir vectores cuyo tamaño se calcula en tiempo de ejecución.

Sintaxis

tipo nombreVector[expresión];

Donde "expresión" representa una expresión que se evalúa en tiempo de ejecución y determina el tamaño del vector. La única restricción es que no se puede definir de esta forma si el vector es global o estático (static). Sólo se pueden definir vectores dinámicos como variables locales. Una vez creado su tamaño no puede cambiar y se comporta a todos los efectos como un vector normal.
Advertencia: No es posible devolver en una función una variable local de tipo vector porque desaparece cuando termina la ejecución de la función.

Ejemplo

La función sumaMatriz calcula la suma de los elementos de una matriz de enteros con un número variable de filas y un número fijo de columnas.

#include <stdio.h>
int sumaMatriz(int m[][10], int nfilas){
   int i, j, s=0;
   for(i=0;i<nfilas;i++)
      for(j=0;j<10;j++)  
         s += m[i][j];       /* Se accede a cada elemento de la matriz */
   return s;
}
int main(){
   int i, j, tan;
   printf("Introduzca el número de elementos del vector\n");
   scanf("%d",&tan);
   int v[tan];               /* Vector dinámico */
   printf("Introduzca los elementos del vector\n");
   for(i=0;i<tan;i++){
      printf("v[%d]=",i);   
      scanf("%d",&v[i]);
   }
   printf("El último elemento del vector es %d\n", v[tan-1]);   
   int c[15][10];   /* Define una matriz que va desde el elemento c[0][0] al c[14][9] */
   printf("Introduzca los elementos de la matriz\n");
   for(i=0;i<15;i++)
      for(j=0;j<10;j++) { 
         printf("c[%d][%d]=",i,j);
         scanf("%d",&c[i][j]);       /* Se lee cada elemento de la matriz */
         printf("\n");
      }
   printf("La suma de los elementos de la matriz es %d\n", sumaMatriz(c,15));
   return 0;
}