elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Dudita: Inicializar matriz desde función sin punteros, si es posible.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Dudita: Inicializar matriz desde función sin punteros, si es posible.  (Leído 1,429 veces)
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Dudita: Inicializar matriz desde función sin punteros, si es posible.
« en: 23 Diciembre 2013, 17:15 pm »

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
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. void matriz_a_inicial (int a [][3]);
  5. int main (){
  6.    int a[3][3];
  7.    matriz_a_inicial (a);
  8.    return 0;
  9. }
  10.  
  11. void matriz_a_inicial (int  a [][3]){
  12.    a [3][3]={{1,2,3},{4,5,6},{7,8,9}};
  13. }
  14.  

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


« Última modificación: 23 Diciembre 2013, 18:36 pm por leosansan » En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Dudita: crear matriz desde función sin punteros, si es posible.
« Respuesta #1 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.

Hay parches "chapuceros" como este:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. struct matriz
  4. {
  5.    char a[9];
  6. };
  7.  
  8. struct matriz matriz_a_inicial ();
  9.  
  10. int main ()
  11. {
  12.    struct matriz a;
  13.    a = matriz_a_inicial();
  14.    return 0;
  15. }
  16.  
  17. struct matriz matriz_a_inicial ()
  18. {
  19.    struct matriz a= {1,2,3,4,5,6,7,8,9};
  20.    return a;
  21. }

Si lo que quieres hacer es un mapa, quizás te convenga algo así:
Código
  1. typedef unsigned char Mapa[TAMANYOX][TAMANYOY+1];
  2.  
  3. void ElegirNivel(Mapa Nivel,short Eleccion)
  4. {
  5.  
  6.    Mapa Nivel1 =
  7.    {
  8.        {"XXXXXXXXXXXXXXXXXX"},
  9.        {"X                X"},
  10.        {"X                X"},
  11.        {"X      H         X"},
  12.        {"X                X"},
  13.        {"X                X"},
  14.        {"X                X"},
  15.        {"X                X"},
  16.        {"X                X"},
  17.        {"X                X"},
  18.        {"X                X"},
  19.        {"X                X"},
  20.        {"X                X"},
  21.        {"X                X"},
  22.        {"X  C     C    C  X"},
  23.        {"X                X"},
  24.        {"X                X"},
  25.        {"X                X"},
  26.        {"X                X"},
  27.        {"X                X"},
  28.        {"X                X"},
  29.        {"X  F     F    F  X"},
  30.        {"X                X"},
  31.        {"X                X"},
  32.        {"XXXXXXXXXXXXXXXXXX"}
  33.  
  34.    };
  35.  
  36.       Mapa Nivel2 =
  37.    {
  38.        {"XXXXXXXXXXXXXXXXXX"},
  39.        {"X                X"},
  40.        {"XH    C          X"},
  41.        {"X XXXXXX XXXXXXXXX"},
  42.        {"X        XXXXX   X"},
  43.        {"X      X C       X"},
  44.        {"X      X XXXXXX  X"},
  45.        {"X      X         X"},
  46.        {"X      X XXXXXX  X"},
  47.        {"XX XXXXXCXXXXXXXXX"},
  48.        {"X    C X X       X"},
  49.        {"X      X X       X"},
  50.        {"XXXX XXX X       X"},
  51.        {"X      X         X"},
  52.        {"X      X X    C  X"},
  53.        {"X  C   X X       X"},
  54.        {"X      X X XXXXXXX"},
  55.        {"X      X X       X"},
  56.        {"X      X X       X"},
  57.        {"XXXXXXXX XXXXXXX X"},
  58.        {"XFF              X"},
  59.        {"XFF      CC      X"},
  60.        {"XFF              X"},
  61.        {"XFF              X"},
  62.        {"XXXXXXXXXXXXXXXXXX"}
  63.    };
  64.  
  65.   switch(Eleccion)
  66.    {
  67.    case 1:
  68.        TraspasarMapas(Nivel1,Nivel);
  69.        break;
  70.  
  71.    case 2:
  72.        TraspasarMapas(Nivel2,Nivel);
  73.        break;
  74. }
  75.  
  76. void TraspasarMapas(Mapa Nivel,Mapa Objetivo)
  77. {
  78.    for (int j = 0; j < TAMANYOY; j++)
  79.        for (int i = 0; i < TAMANYOX; i++)
  80.            Objetivo[i][j] = Nivel[i][j];
  81. }
  82.  
  83.  

O cargarlo desde un fichero externo.

Citar
Creo 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:


En línea

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


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Dudita: crear matriz desde función sin punteros, si es posible.
« Respuesta #2 en: 23 Diciembre 2013, 18:47 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! ..... !!!!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Inicializar matriz? « 1 2 »
Java
monsefoster 10 7,312 Último mensaje 18 Noviembre 2009, 06:06 am
por juancho77
Declarar e inicializar matriz de objetos
Java
alzehimer_cerebral 1 4,708 Último mensaje 17 Noviembre 2009, 19:07 pm
por Leyer
Enviar una matriz desde una funcion a la matriz del main
Programación C/C++
erest0r 3 2,422 Último mensaje 22 Junio 2013, 09:05 am
por leosansan
Fallo en inicializar matriz
Java
BJM 1 1,157 Último mensaje 5 Junio 2014, 20:36 pm
por gordo23
Inicializar una matriz
Programación C/C++
JonaLamper 2 996 Último mensaje 7 Marzo 2016, 07:04 am
por furciorifa
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines