Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Ponteiros

Há um trecho da aula que o professor está fazendo a função praondeofantasmavai e ele fala que o "ponteiro xdestino" = opcoes[posicao][0] e o análogo é feito para ydestino. A minha dúvida é: poderia usar "ponteiro xdestino" = &opcoes[posicao][0], passando assim o endereço?

Desta forma que ele usou estamos passando o valor que está dentro desse endereço?

int praondeofantasmavai(int xatual, int yatual, int* xdestino, int* ydestino){

    int opcoes[4][2] = {
        {xatual, yatual+1},
        {xatual+1, yatual},
        {xatual, yatual-1},
        {xatual-1, yatual}
    };

    (. . .)
    (. . .)

        if (verificalimitemapa(&m, opcoes[posicao][0], opcoes[posicao][1]) 
            && posicaovaziamapa (&m, opcoes[posicao][0], opcoes[posicao][1])) {

            *xdestino = opcoes[posicao][0];
            *ydestino = opcoes[posicao][1];
            return 1;
        }
    }

Tenho também outra dúvida: poderia ser feito desta forma abaixo ao invés da de cima? O computador saberia que xdestino é ponteiro?

xdestino = opcoes[posicao][0]
1 resposta
solução!

Olá, Eduardo!

Na função praondeofantasmavai, quando fazemos *xdestino = opcoes[posicao][0] e *ydestino = opcoes[posicao][1], estamos atribuindo os valores das posições opcoes[posicao][0] e opcoes[posicao][1] às variáveis apontadas pelos ponteiros xdestino e ydestino, respectivamente. Ou seja, estamos passando os valores que estão dentro dessas posições.

Se você fizer xdestino = &opcoes[posicao][0], estará atribuindo o endereço de opcoes[posicao][0] à variável xdestino. Nesse caso, xdestino seria um ponteiro para o endereço de opcoes[posicao][0].

Portanto, se você quiser passar o endereço de opcoes[posicao][0] para xdestino, você pode fazer *xdestino = &opcoes[posicao][0]. Assim, xdestino será um ponteiro para o endereço de opcoes[posicao][0].

Espero ter esclarecido sua dúvida! Se tiver mais alguma pergunta, é só me dizer. Bons estudos!