Pues la duda que tengo es que se supone que para crear una matriz de n*m elementos, tengo que crear un puntero doble que apunte a un puntero etc.... Lo que puse ahi es que yo puse 2 formas, una que no utiliza punteros que se supone que no se puede crear asi, no se supone que se tiene que usar la palabra reservada new para generar memoria dinamica y asi poder crear un matriz de n*m o un vector de n elementos?
Cita:
Iniciado por vangodp ¿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í: [url]http://c.conclase.net/curso/?cap=017#inicio[/url]
Código C++:
Ver original#include <iostream>
using namespace std;
int main() {
int ** tabla;//"tabla" es un puntero que apunta a un objeto de tipo puntero a int."puntero a puntero"
int n = 134;
int m = 231;
int i;
// Sabemos que un puntero se comporta casi igual que un array, por lo tanto nada nos impide que
// "tabla" apunte al primer elemento de un array de punteros:
tabla = new int * [n];
// Ahora estamos en un caso similar, "tabla" apunta a un array de punteros a int,
// cada elemento de este array puede ser a su vez un puntero al primer elemento de otro array:
// n arrays de m ints
for ( i = 0; i < n; i++ ) {
tabla[i] = new int[m];
}
// Ahora tabla apunta a un array de dos dimensiones de n * m, podemos acceder a cada elemento
// igual que accedemos a los elementos de los arrays normales:
tabla[21][33] = 123;
cout << tabla[21][33] << endl;
// Otra diferencia con los arrays normales es que antes de abandonar el programa hay que liberar
// la memoria dinámica usada, primero la asociada a cada uno de los punteros de "tabla[i]":
// Liberar memoria:
for ( i = 0; i < n; i++ ) { delete[] tabla[i]; }
// Y después la del array de punteros a int, "tabla":
delete[] tabla;
return 0;
}//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.