Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: eleon en 19 Julio 2012, 23:31 pm



Título: Tamaño de array através de variable
Publicado por: eleon en 19 Julio 2012, 23:31 pm
Buenas:

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

Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int main ()
  5. {
  6.  
  7.  
  8.    int columna = 3;
  9.    int linea = 3;
  10.    int array[columna][linea] = {5, 1, 2, 5, 1, 2, 5, 1, 2};
  11.    return 0;
  12. }
  13.  

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
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int main ()
  5. {
  6.  
  7.  
  8.    int columna = 3;
  9.    int linea = 3;
  10.    int array[columna][linea];
  11.    return 0;
  12. }
  13.  

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

Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int main ()
  5. {
  6.    int array[3][3] = {5, 1, 2, 5, 1, 2, 5, 1, 2};
  7.    return 0;
  8. }
  9.  

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.


Título: Re: Tamaño de array através de variable
Publicado por: DickGumshoe en 19 Julio 2012, 23:36 pm
Mmm... Creo que no se puede. Lo que más se le aproxima es hacer una definición, quedando así:

Código
  1. #include <iostream>
  2. #define COLUMNA 3
  3. #define LINEA 3
  4.  
  5. using namespace std;
  6.  
  7. int main ()
  8. {
  9.    int array[COLUMNA][LINEA] = {5, 1, 2, 5, 1, 2, 5, 1, 2};
  10.    return 0;
  11. }
  12.  

Saludos!


Título: Re: Tamaño de array através de variable
Publicado por: eleon en 19 Julio 2012, 23:50 pm
Buena idea, gracias por la sugerencia.

Saludos.


Título: Re: Tamaño de array através de variable
Publicado por: rir3760 en 20 Julio 2012, 01:48 am
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
  1. const int linea = 3
  2. const int columna = 3;
  3.  
  4. // ...
  5.  
  6. int mat[linea][columna] = {
  7.   {5, 1, 2},
  8.   {5, 1, 2},
  9.   {5, 1, 2}
  10. };

Un saludo