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

Funcionamento do ponteiro nesse código

Olá colegas,

Fiquei com um pouco de dúvida no funcionamento do ponteiro que utilizamos nesse código.

void potencia(int * resultado, int a, int b);

int main(){

    int a, b;
    int resultado;

    a = valores(a);
    b = valores(b);

    printf("A = %d e B = %d\n", a, b);

    potencia(a,b,&resultado);

    printf("Resultado: %d\n", resultado);

}

void potencia(int * resultado, int a, int b){

    (*resultado) = 1;
    int i;
    for(i = 0; i < b; i++){
        (*resultado) = (*resultado) * a;

    }

}

Quando acessamos o ponteiro na função potencia() estamos apontado para o endereço da variável resultado no função main() correto? Eu não entendi muito bem como o resultado que obtemos ao final da função pontencia(), é atribuído para a variável "resultado" da função main(), sendo que estamos apontando para o endereço da mesma ao acessar o ponteiro.

(*resultado) = (*resultado) * a;

Essa expressão está dizendo que a variável que (resultado) aponta recebe o valor calculado? Fiquei meio confuso já que são dois ponteiros na mesma expressão

Peço desculpas se dúvida não tenha ficado muito clara.

2 respostas
solução!

Ponteiro é sempre um assunto complexo, é importante entender que a função potencia tem um escopo próprio, a váriavel i por exemplo só existe dentro dessa função, já a e b como não foram passadas por referência ganham cópias dentro do escopo da função potencia ou seja se você alterar o valor dessas variáveis dentro da função potencia só vai afetar o valor delas dentro do escopo dessa função, nada muda para o valor delas no escopo da main, já no caso de resultado como foi passada por referência ao mudar o valor dela no escopo da função potencia você muda o valor da variável no escopo da main.

Além disso seu código tem um erro, essa linha: potencia(a,b,&resultado);

Deveria está assim: potencia(&resultado,a,b);

Obrigado Ângelo, ficou mais claro depois da sua explicação. O fato de resultado ser um ponteiro nos parâmetros de potencia() faz com que tudo que for feito ao manipula-lo nessa função ser atribuído no resultado(variável) da função main().