Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Arrays após void´s

Entendi que variáveis em escopos diferentes, mesmo com o mesmo nome são diferentes, porem, o mesmo não acontece com o Array.

Fiz um teste e imprimi ambos os Arrays que estão em escopos diferentes(um na main e outro na chuta) e percebi que o valor do Array se mantem igual para ambas!

Ai vai a pergunta, quando falo que uma função vai receber um array, esse array está sendo declarado sem valor algum com seus espaços armazenando lixo de memória como acontece nos int´s ou tem alguma coisa por traz que faz ele segurar o valor? Quanto ao int tentativas, quando eu falo que a função vai receber uma variavel do tipo inteiro, porque ela tem um comportamento diferente do Array?

O código está igual ao da aula, com exceção dos prints para verificar os valores dos Arrays, por via das duvidas segue o código:

#include <stdio.h>
#include <string.h>




void abertura(){
    printf("***************************\n\n");
    printf("Bem vindo ao Jogo da Forca!\n\n");
    printf("***************************\n\n");
}

void chuta(char chutes[26],int tentativas){
    char chute;
    printf("Qual letra? ");
    scanf(" %c", &chute);

    chutes[tentativas] = chute;
    printf(chutes);
    printf('\n\n')
}

int main(){
    char palavrasecreta[20];
    sprintf(palavrasecreta, "MELANCIA");

    int acertou = 0;
    int enforcou = 0;

    char chutes[26];
    int tentativas = 0;

    abertura();

    do{
        int i;
        for(i = 0; i < strlen(palavrasecreta); i++){
            int j;
            int achou = 0;

            for(j = 0; j < tentativas; j++){
                if(chutes[j] == palavrasecreta[i]){
                    achou = 1;
                    break;
                }
            }
            if(achou){
                printf("%c ", palavrasecreta[i]);
            }else{
                printf("_ ");
            }

        }
        printf("\n");

        chuta(chutes,tentativas);
        printf(chutes);
        printf('\n\n')
        tentativas++;

    }while(!acertou && !enforcou);
}
2 respostas
solução!

olha um array é diferente de uma variável comum pois quando declaramos um array estamos fazendo referencia a uma certa quantidade de posições na memoria , logo o array é mais parecido comum ponteiro , mas respondendo sua primeira pergunta quando declaramos um array nas suas posições tem sim lixo de memoria como uma variável comum e a diferença do comportamento da função do array para o inteiro se deve justamente a isso que expliquei no começo ali quando a função recebe o array de 26 posições , seria como dizer que a função vai receber como parâmetro um ponteiro porem com a diferença que esse ponteiro tem 26 posições (quase isso explicando mais superficial)

Vou pesquisar sobre ponteiros, ainda não cheguei neles kkk, ouvi falar no hipsters que "é complicado e que depois dele não existem coisas dificeis" kkk.

Vou me aprofundar mais na linguagem, valeu!