Tamaño de array através de variable

Iniciado por eleon, 19 Julio 2012, 23:31 PM

0 Miembros y 1 Visitante están viendo este tema.

eleon

Buenas:

Quería saber si hay alguna forma de definir el tamaño de un array bidimensional mediante variables e inicializarlo. Ejemplo:

Código (cpp) [Seleccionar]
#include <iostream>
using namespace std;

int main ()
{


   int columna = 3;
   int linea = 3;
   int array[columna][linea] = {5, 1, 2, 5, 1, 2, 5, 1, 2};
   return 0;
}


Esto da el siguiente error: error: variable-sized object 'array' may not be initialized|

Sin embargo si no lo inicializo el mismo código funciona bien:

Código (cpp) [Seleccionar]
#include <iostream>
using namespace std;

int main ()
{


   int columna = 3;
   int linea = 3;
   int array[columna][linea];
   return 0;
}


O si lo inicializo pero defino el tamaño del array mediante valores numéricos y no variables también funciona bien:

Código (cpp) [Seleccionar]
#include <iostream>
using namespace std;

int main ()
{
   int array[3][3] = {5, 1, 2, 5, 1, 2, 5, 1, 2};
   return 0;
}


Entiendo que si el tamaño lo definimos con variables no es lógico que lo inicialicemos porque al variar el valor de la variable y definir de nuevo el array pueden no caber todos los elementos. Pero quizá haya algún "truquillo" puesto que la idea es aumentar el tamaño de los array (no en tiempo de ejecución logicamente) y eso no supondría ningún problema al compilar.

¿Alguna idea para que funcione el primer ejemplo?. Gracias.

DickGumshoe

Mmm... Creo que no se puede. Lo que más se le aproxima es hacer una definición, quedando así:

Código (cpp) [Seleccionar]
#include <iostream>
#define COLUMNA 3
#define LINEA 3

using namespace std;

int main ()
{
    int array[COLUMNA][LINEA] = {5, 1, 2, 5, 1, 2, 5, 1, 2};
    return 0;
}


Saludos!

eleon

Buena idea, gracias por la sugerencia.

Saludos.

rir3760

En C++ (C++98, habrá que revisar el nuevo estándar) no puedes utilizar variables para indicar el numero de elementos en un array, deben ser constantes.

Y para indicar el valor inicial de cada elemento en un array utilizas una lista de valores delimitada con llaves. Eso aplica de forma recursiva si cada elemento (como es tu caso) también es un array:
Código (cpp) [Seleccionar]
const int linea = 3
const int columna = 3;

// ...

int mat[linea][columna] = {
   {5, 1, 2},
   {5, 1, 2},
   {5, 1, 2}
};


Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language