Dudita: Inicializar matriz desde función sin punteros, si es posible.

Iniciado por leosansan, 23 Diciembre 2013, 17:15 PM

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

leosansan

El tema está en que si declaro en main la matriz como está en la función todo va bien. Pero al intentar declararla sólo con sus dimensiones en main e intentar inicializarla desde la función no me sale.  :rolleyes:

Creo que como lo tengo en la función me estaré refiriendo al elemento 3,3 en lugar de a toda la matriz.

Código (cpp) [Seleccionar]

#include <stdio.h>
#include <stdlib.h>

void matriz_a_inicial (int a [][3]);
int main (){
   int a[3][3];
   matriz_a_inicial (a);
   return 0;
}

void matriz_a_inicial (int  a [][3]){
   a [3][3]={{1,2,3},{4,5,6},{7,8,9}};
}


Felices Navidades y Próspero Año Nuevo.
Saluditos! ..... !!!!

amchacon

Es una sintaxis de inicialización no de asignación, el operador = no está definido en los arrays por lo que no puedes "reasignarlo in the way".

De hecho eso no es un array, puesto que los arrays no se pasan a las funciones, estas pasando un puntero char* al primer elemento.

Hay parches "chapuceros" como este:
#include <stdio.h>
#include <stdlib.h>
struct matriz
{
   char a[9];
};

struct matriz matriz_a_inicial ();

int main ()
{
   struct matriz a;
   a = matriz_a_inicial();
   return 0;
}

struct matriz matriz_a_inicial ()
{
   struct matriz a= {1,2,3,4,5,6,7,8,9};
   return a;
}


Si lo que quieres hacer es un mapa, quizás te convenga algo así:
typedef unsigned char Mapa[TAMANYOX][TAMANYOY+1];

void ElegirNivel(Mapa Nivel,short Eleccion)
{

   Mapa Nivel1 =
   {
       {"XXXXXXXXXXXXXXXXXX"},
       {"X                X"},
       {"X                X"},
       {"X      H         X"},
       {"X                X"},
       {"X                X"},
       {"X                X"},
       {"X                X"},
       {"X                X"},
       {"X                X"},
       {"X                X"},
       {"X                X"},
       {"X                X"},
       {"X                X"},
       {"X  C     C    C  X"},
       {"X                X"},
       {"X                X"},
       {"X                X"},
       {"X                X"},
       {"X                X"},
       {"X                X"},
       {"X  F     F    F  X"},
       {"X                X"},
       {"X                X"},
       {"XXXXXXXXXXXXXXXXXX"}

   };

      Mapa Nivel2 =
   {
       {"XXXXXXXXXXXXXXXXXX"},
       {"X                X"},
       {"XH    C          X"},
       {"X XXXXXX XXXXXXXXX"},
       {"X        XXXXX   X"},
       {"X      X C       X"},
       {"X      X XXXXXX  X"},
       {"X      X         X"},
       {"X      X XXXXXX  X"},
       {"XX XXXXXCXXXXXXXXX"},
       {"X    C X X       X"},
       {"X      X X       X"},
       {"XXXX XXX X       X"},
       {"X      X         X"},
       {"X      X X    C  X"},
       {"X  C   X X       X"},
       {"X      X X XXXXXXX"},
       {"X      X X       X"},
       {"X      X X       X"},
       {"XXXXXXXX XXXXXXX X"},
       {"XFF              X"},
       {"XFF      CC      X"},
       {"XFF              X"},
       {"XFF              X"},
       {"XXXXXXXXXXXXXXXXXX"}
   };

  switch(Eleccion)
   {
   case 1:
       TraspasarMapas(Nivel1,Nivel);
       break;

   case 2:
       TraspasarMapas(Nivel2,Nivel);
       break;
}

void TraspasarMapas(Mapa Nivel,Mapa Objetivo)
{
   for (int j = 0; j < TAMANYOY; j++)
       for (int i = 0; i < TAMANYOX; i++)
           Objetivo[i][j] = Nivel[i][j];
}



O cargarlo desde un fichero externo.

CitarCreo que como lo tengo en la función me estaré refiriendo al elemento 3,3 en lugar de a toda la matriz.
Que además no existe porque es una matriz de 3x3  :silbar:
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

leosansan

Cita de: amchacon en 23 Diciembre 2013, 17:55 PM
Es una sintaxis de inicialización no de asignación, el operador = no está definido en los arrays por lo que no puedes "reasignarlo in the way".

De hecho eso no es un array, puesto que los arrays no se pasan a las funciones, estas pasando un puntero char* al primer elemento.
......................................................
O cargarlo desde un fichero externo.
...................................................

Creo que esa sería la solución óptima. Pero para el caso que me ocupa, al necesitar solamente en dos ocasiones la matriz original, creo que optaré por hacer una copia de la misma.

Gracias por los puntos de vista que me has aportado.
;-) ;-) ;-)

Felices Navidades y Próspero Año Nuevo.
Saluditos! ..... !!!!