int ancho = 10;
int alto = 10;
int arreglo[ancho][alto]
Veo que esto no es posible, ancho y alto deben ser constantes. Si no me equivoco tengo dos opciones para resolver esto:
-Listas enlazadas: Me ha parecido demasiado complicado para meterme en tal berengenal.
-Memoria Dinámica. Utilizando malloc/free: Parece mas fácil pero ¿cómo puedo aplicarlo a un arreglo bidimensional?
¿Hay otra alternativas? ¿cual es la forma mas simple de hacer esto?
S2.
Cita de: "J_F_NASH"
int ancho = 10;
int alto = 10;
int arreglo[ancho][alto]
Veo que esto no es posible, ancho y alto deben ser constantes. Si no me equivoco tengo dos opciones para resolver esto:
-Listas enlazadas: Me ha parecido demasiado complicado para meterme en tal berengenal.
-Memoria Dinámica. Utilizando malloc/free: Parece mas fácil pero ¿cómo puedo aplicarlo a un arreglo bidimensional?
¿Hay otra alternativas? ¿cual es la forma mas simple de hacer esto?
S2.
Es que en tu codigo no hay costantes como las que te funcionarian en este caso:
#define LOQUESEA_ALTO 10
#define LOQUESEA_ANCHO 10
int arreglo[LOQUESEA_ALTO][LOQUESEA_ANCHO]
Lo de las listas enlazadas simplemente para hacer un array bidimensional es matar moscas a cañonazos.
Estoy un poco oxidado de C, pero creo que con memoria dinamica tendria algo como este aspecto:
int * arreglo;
arreglo = (int *)malloc( LOQUESEA_ALTO*LOQUESEA_ANCHO*sizeof(int));
Tu código no se si compilaría si en vez de ser C fuera C++ haciendo este cambio:
const ancho = 10;
const alto = 10;
int arreglo[ancho][alto]
Ya digo que no se si compilaria. Probablemente.
int * arreglo;
arreglo = (int *)malloc( LOQUESEA_ALTO*LOQUESEA_ANCHO*sizeof(int));
Esto esta bien y luego para acceder a una celda en particular (x,y):
arreglo[x + y* LOQUESEA_ALTO]
Para que sea bidimensional tb te vale esto
int **arreglo;
areglo=(int**)malloc(sizeof(int*) * filas);
int i;
for(i=0; i<filas; i++)
arreglo[i]=(int*)malloc(sizeof(int)*columnas);
Para acceder a un elemnto basta con:
arreglo[fila][columna]=2;
Y para liberar la memoria:
for(int i=0; i<filas; i++)
free(arreglo[i]);
free(arreglo);
Y si usas C++:
int filas=2, columnas=3;
vector< vector<int> > arreglo(filas); // ojo espacios entre > y >
for(int i=0; i<filas; i++)
arreglo[i]=vector<int>(columnas);
arreglo[0][0]=3; // Casca si fuera de rango
arreglo.at(0).at(0)=3; // Tira excepcion si fuera de rango
No hace falta eliminar memoria ya que lo hace el destructor de la clase vector.
Edit: error en el for del primer codigo
y no es mas facil...
int matriz[][];
int filas = 10;
int colum = 20;
matriz = new int[filas][columnas];
matriz[0][6]=10;
Eso si, necesitaras el "delete[][] matriz";
Cita de: "shephiroth"y no es mas facil...
int matriz[][];
int filas = 10;
int colum = 20;
matriz = new int[filas][columnas];
matriz[0][6]=10;
Eso si, necesitaras el "delete[][] matriz";
Esto no creo que ande ... no se en que lenguaje puede que si pero ni en C++ y menos C.
Tal vez en uno manejado o algo raro que no conozca.
Saludos
En Java andaría, o algo por el estilo :P, pero en c/c++, ni de coña. La solución de de Martinez es la que suelo usar yo.
Teneis razon, me confundi con java, c no permite crear matrices de una tirada, hay q hacerlo en dos pasos ^^;