Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Inicializar array bidimensional

Estas en el tema de Inicializar array bidimensional en el foro de C/C++ en Foros del Web. Hola de nuevo :) ,tengo una duda sobre cómo inicializar un array bidimensional .Guiandome de la teoría yo creo que es correcto pero no entiendo ...
  #1 (permalink)  
Antiguo 28/02/2015, 04:41
Avatar de anggiebs  
Fecha de Ingreso: julio-2014
Ubicación: Madrid
Mensajes: 35
Antigüedad: 10 años, 3 meses
Puntos: 0
Exclamación Inicializar array bidimensional

Hola de nuevo :) ,tengo una duda sobre cómo inicializar un array bidimensional .Guiandome de la teoría yo creo que es correcto pero no entiendo porqué me salen estos errores en la línea donde inicializo el tablero a 1 :

error C2059: error de sintaxis : '{'
error C2143: error de sintaxis : falta ';' delante de '{'
error C2143: error de sintaxis : falta ';' delante de '}'
///
Código C++:
Ver original
  1. const int N = 4;
  2.  
  3. typedef int tTablero[N][N]; //Array bidimensional de dimensión 4 x 4
  4.  
  5. void inicializar(tTablero tablero){
  6.    
  7.     tablero = {1};  //Inicializamos todo el array a 1(vacío).
  8.         .....
  9.        /*Tengo mucho más código que no creo que esté relacionado con el error
  10.           que me sale por eso no lo copio */
  11. }

Alguien que pueda ayudarme :) ?
  #2 (permalink)  
Antiguo 28/02/2015, 05:04
 
Fecha de Ingreso: julio-2012
Mensajes: 375
Antigüedad: 12 años, 3 meses
Puntos: 28
Respuesta: Inicializar array bidimensional

El error está en el código que has omitido...
  #3 (permalink)  
Antiguo 28/02/2015, 05:59
Avatar de anggiebs  
Fecha de Ingreso: julio-2014
Ubicación: Madrid
Mensajes: 35
Antigüedad: 10 años, 3 meses
Puntos: 0
Respuesta: Inicializar array bidimensional

Uffff ,es que es arto código :/ .Casi todos dejan de leer el enunciado nada más ver un párrafo enorme .
Gracias de todas formas,creo que estoy cerca de encontrar mi fallo :)
  #4 (permalink)  
Antiguo 28/02/2015, 12:06
lareto
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Inicializar array bidimensional

No puedes modificar los elementos de un array con una lista de inicialización, que es lo que pretendería hacer la línea
Cita:
tablero = {1}; //Inicializamos todo el array a 1(vacío).
La respuesta simple podría ser: inicializar() recibe un array con valores, y no se puede asignar nuevos valores a un array a través de una lista de inicialización.

Aunque en realidad, inicializar() no recibe un tTablero, como podría parecer, sino que al pasar un array de estilo C como parámetro de función, ese array "decae" en un puntero a su primer elemento (esa es la regla). Entonces, lo que recibe inicializar() es un puntero a un array de N elementos. De modo que inicializar() podría haberse escrito así:
void inicializar( int(*tablero)[4] )

Y a ese puntero no le puedes asignar una lista de inicialización.

Tu compilador ha hecho lo que pudo para darte un mensaje de error, pero ha podido poco, ciertamente.
  #5 (permalink)  
Antiguo 02/03/2015, 16:02
 
Fecha de Ingreso: febrero-2015
Mensajes: 404
Antigüedad: 9 años, 8 meses
Puntos: 3
Respuesta: Inicializar array bidimensional

usa memset para seteat todo con el valor 1. Seria algo como memset(tablero,'1',sizeof(tTablero)); No se seguro si te funcionará asi pero si no pues pasas N a la funcion y con dos for anidados pones todos a 1.
  #6 (permalink)  
Antiguo 02/03/2015, 16:25
Avatar de anggiebs  
Fecha de Ingreso: julio-2014
Ubicación: Madrid
Mensajes: 35
Antigüedad: 10 años, 3 meses
Puntos: 0
Respuesta: Inicializar array bidimensional

Sí,ya lo he solucionado :D ,gracias por la ayuda a todos !
La explicación de Lareto fue la que la profesora me dió hoy en clase sobre esta duda :D

Al final he hecho lo del doble bucle for y no entiendo porqué pero me aconsejaron quitar las llaves del 1,así ha quedado :) :

Código C++:
Ver original
  1. for(int fila = 0; fila < N; fila++){
  2.     for(int col = 0; col < N; col++){
  3.         tablero[fila][col] = 1; //Inicializamos todo el array a 1(vacío).
  4.     }
  5. }
  #7 (permalink)  
Antiguo 02/03/2015, 16:31
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 7 meses
Puntos: 1360
Respuesta: Inicializar array bidimensional

Ya nadie usa memset.

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main()
  5. {
  6.     int a[20];
  7.     memset(a, 0, sizeof(a));
  8. }

Etiquetas: inicializar, int
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:57.