Ir para o conteúdo
parra1100

[Resolvido] Matriz de estruturas Dúvida

Mensagens Recomendadas

parra1100

Boas, estou a criar um mapa para um jogo, o mapa é um array de duas dimensões de estruturas.

typedef struct room {
int pN; //porta a norte
int pS; //porta a sul
int pE; //porta a este
int pO; //porta a oeste
//outras estruturas
} sala;

De seguida na main criei uma matriz do tipo sala e enviei-a para uma função para preencher os vários atributos.

void main()
{
sala tab[TAM][TAM];
cria_lab(tab); //função que inicializa os atributos do mapa
}

Até aqui penso que esteja tudo bem, pois usando o visual studio e fazendo um breakpoint consigo ver que está tudo bem inicializado.

O problema surge quando volto a passar a matriz para outras funções:

//exemplo de uma função que usa o mapa
void movimento(sala tab[][TAM], int posx, int posy)
{
//code
}

Quando passo o mapa para dentro de uma função ele fica só um array de uma dimensão em vez de 2 dimensões.

O problema penso que estará na passagem do mapa.

Obrigado.

Editado por apocsantos
geshi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
parra1100

Quando fiz o breakpoint só aparecia um array em vez de uma matriz, e quando estou em modo jogo a fazer os movimentos (cima, baixo, direita, esquerda), ele apenas funciona numa direção, ou seja, ou norte e sul ou este e oeste.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

vamos lá ver as duas razões que apresentas:

- quando fiz breakpoint só aparece um array

e acreditas em tudo o que um computador supõe ? o que me dizes é somente que o visual studio não sabe bem o que é a variável é e acha que é um array

- e quando estou em modo jogo a fazer os movimentos (cima, baixo, direita, esquerda), ele apenas funciona numa direção, ou seja, ou norte e sul ou este e oeste.

isso só soa a problemas de programação, nada haver com o tipo de dados de uma variável

o que estou a tentar dizer é um ponto muito simples:

se a variável foi declarada como um array multidimensional (neste caso de duas dimensões), então poderá ser acedida sempre como um array com essas dimensões (relativamente ao tamanho) sem ocorrer em problemas de acesso. é essa a razão que chamei à tua afirmação inicial de "magia", porque simplesmente isso não acontece.


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
parra1100

hmm, ok. Pecebo.

Então surgiu outra dúvida, para aceder a uma estrutura numa dada posição da matriz, tenho de usar esta forma:

(tab[0] + TAM * posx + posy)->pN;

??

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
parra1100

Se eu chamar a função:

movimento(tab, j.posX, j.posY);

E a receber:

void movimento(sala tab[][TAM], int posx, int posy)

E tentar aceder:

tab[posx][posy]->pN

Ele dá erro e diz que a última expressão precisa de ter pointer type

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

quando se olha para o seguinte código:

(tab[0] + TAM * posx + posy)->pN;

assumi que em cada posição do array multidimensional se encontra um ponteiro, o que não é verdade

deverá ser:

tab[posx][posy].pN;


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.