Ver la versión completa : Como creo un tipo array?
Ya se que es una tonteria, pero es que nunca me he visto en la situacion y no consigo encontrar la sintaxis para un caso asi en concreto...
A ver, yo he creado un tipo enumerado tipo casilla:
enum casilla {libre, ocupada, ... };
Pues bien, quiero crear un tablero, con cualquiera de estas dos opciones, o un tipo tablero matriz de dos dimensiones, o un tipo linea de X casillas y un tipo tablero de Y tipo lineas.
Como hago eso? Esto es lo que estoy intentando:
typedef casilla linea[MAXCASILLAS];
typedef linea tablero[MAXLINEAS];
Se que es una tonteria, pero es que aun no me desenvuelvo bien en C y me asaltan dudas tontas como estas de vez en cuando... :D
Muchas gracias
Un tablero con una matriz:
enum casilla tablero[MAX_FILAS][MAX_COLUMNAS];
Esto creaun doble puntero al tipo casilla, osea una matriz.
Lo mas comodo es:
typedef enum {libre, ocupada,...} casilla;
Y declarar la variable asi:
casilla tablero[MAX_FILAS][MAX_COLUMNAS];
Te dejo aqui un codigo chorra como ejemplo:
#include <stdio.h>
#define MAX_FILAS 5
#define MAX_COLUMNAS 5
typedef enum {libre, ocupada} casilla;
int main () {
casilla tablero[MAX_FILAS][MAX_COLUMNAS];
tablero[1][2]=ocupada;
if (tablero[1][2]==ocupada)
printf("Fenomeno\n");
}
...
Sere sunnormal?? xD
Pos claro que no me salia, si estaba poniendo el nombre del tipo antes que la descripcion... ¬¬
En fin, muchas gracias ;)
Me doy cuenta de que no es lo que queria... era un fallo, pero la pregunta era como hacer para declarar un tipo que es un array.
Es decir, estaria bien:
typedef struct
{
int x, y;
}posicion;
typedef enum {libre, ocupada} casilla;
typedef casilla linea[MAX_TILES];
typedef linea tablero[MAX_LINES];
void escribe (tablero *mi_tablero, casilla mi_casilla, posicion mi_posicion)
{
mi_tablero[mi_posicion.y][mi_posicion.x]=mi_casilla;
}
Seria correcto? Me da error de incompatibilidad de tipos en la asignacion... Podria hacer: mi_linea = mi_tablero[pos.y]; ? Es que tambien me da fallo al intentarlo...
Es que creo que no se puede definir un tipo array con typedef. Aun asi, pq quieres desglosar la matriz en dos arrays si lo puedes hacer en una sola declaracion?
Estoy tonto, claro que puedes declarar arrays con typedef. El fallo esta en tu codigo. Tu le estas pasando a la funcion un puntero al tipo tablero, cuando el tablero en sí es un puntero.
Los arrays, en realidad son punteros. Las matrices, son punteros a punteros, etc...
El codigo correcto es:
typedef struct
{
int x, y;
}posicion;
typedef enum {libre, ocupada} casilla;
typedef casilla linea[MAX_TILES];
typedef linea tablero[MAX_LINES];
void escribe (tablero mi_tablero, casilla mi_casilla, posicion mi_posicion)
{
mi_tablero[mi_posicion.y][mi_posicion.x]=mi_casilla;
}
Y mas elegante:
typedef struct
{
int x, y;
}posicion;
typedef enum {libre, ocupada} casilla;
typedef casilla tablero[MAX_LINES][MAX_TILES];
void escribe (tablero mi_tablero, casilla mi_casilla, posicion mi_posicion)
{
mi_tablero[mi_posicion.y][mi_posicion.x]=mi_casilla;
}
Damizean
18/10/2004, 14:59
Además de que si pasas por referencia (el puntero) una matriz de varias dimensiones, esta pierde la identidad y debe expresarse como una dimensión con :
buffer[pox+(posy*ancho de buffer)]=dato;
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions Inc. All rights reserved.