Ver Mensaje Individual
  #2 (permalink)  
Antiguo 30/04/2014, 02:43
Avatar de vangodp
vangodp
 
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 11 años, 1 mes
Puntos: 38
Respuesta: Arreglos, vectores y matrices

¿Y cual es la duda que tienes?
¿Si tienes que usar la dinámica con las matrices?
Con las matrices bidimencionales la forma es hacer como una especie de tabla de tablas
Se usa puntero que apunta a puntero.Primero se crea el puntero que apunta otro puntero que sera las fila, eso permite guardar otro puntero que sera la columna y por eso debe ser un puntero a puntero. Se usa igual que una matriz bidimensional normal, accediendo de esta forma tabla[10][7] = unvalor;
El ejemplo y la explicación la tienes aquí: http://c.conclase.net/curso/?cap=017#inicio

Código C++:
Ver original
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int main() {
  5.     int ** tabla;//"tabla" es un puntero que apunta a un objeto de tipo puntero a int."puntero a puntero"
  6.     int n = 134;
  7.     int m = 231;
  8.     int i;
  9.    
  10.     // Sabemos que un puntero se comporta casi igual que un array, por lo tanto nada nos impide que
  11.     // "tabla" apunte al primer elemento de un array de punteros:
  12.     tabla = new int * [n];
  13.    
  14.     // Ahora estamos en un caso similar, "tabla" apunta a un array de punteros a int,
  15.     // cada elemento de este array puede ser a su vez un puntero al primer elemento de otro array:
  16.     // n arrays de m ints
  17.     for ( i = 0; i < n; i++ ) {
  18.         tabla[i] = new int[m];
  19.     }
  20.  
  21.     // Ahora tabla apunta a un array de dos dimensiones de n * m, podemos acceder a cada elemento
  22.     // igual que accedemos a los elementos de los arrays normales: 
  23.     tabla[21][33] = 123;
  24.     cout << tabla[21][33] << endl;
  25.    
  26.     // Otra diferencia con los arrays normales es que antes de abandonar el programa hay que liberar
  27.     // la memoria dinámica usada, primero la asociada a cada uno de los punteros de "tabla[i]":
  28.     // Liberar memoria:
  29.     for ( i = 0; i < n; i++ ) { delete[] tabla[i]; }
  30.    
  31.     // Y después la del array de punteros a int, "tabla":
  32.     delete[] tabla;
  33.    
  34.     return 0;
  35. }//END OF MAIN

Es muy importante no olvidar usar el delete después para liberar la memoria antes de terminar la función se suele usar los destructores para que se encarguen de realizar esa tarea por ti cuando uses las clases, usa los destructores para liberar la memoria.

Última edición por vangodp; 30/04/2014 a las 02:50