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

Eu não entendi esse código;

  1. `
  2. `#include <stdio.h>
  3. void potencia (int* resultado, int a, int b) {
  4. *resultado = 1;
  5. for(int i = 0; i < b; i++) {
  6. *resultado = *resultado * a;
  7. }
  8. printf("A potência 10 elevado a 5 %d",*resultado);
  9. }
  10. int main(){
  11. int resultado;
  12. potencia(&resultado, 10, 5);
  13. }
1 resposta
solução!

Olá Ezequiel.

É preciso primeiro entender o conceito de ponteiros, e eu não sei se isso já foi abordado no curso.

Um ponteiro não guarda a informação em si. Ele guarda um endereço de memória, que se você for lá, terá as informações que deseja.

Dessa forma:

int num = 5;

"num" é um número inteiro que guarda o valor 5. Mas:

int* ptr_para_inteiro;

Esse ptr_para_inteiro é um ponteiro, ou seja: guarda um endereço de memória. Se você for até esse endereço, vai encontrar um número inteiro. Nós dizemos então que ele é um "ponteiro para int". Se quisermos ir até esse endereço e obter as informações que lá estão, colocamos um asterisco antes dele. Assim:

int* ptr_para_inteiro;

*ptr_para_inteiro = 7; // fomos até o endereço que ele está apontando e colocamos o valor 7

A função potencia recebe o endereço de memória de um inteiro, que seria aquele parâmetro int* resultado, e um número que será a base e o outro que será o expoente. O resultado dessa potenciação é armazenado diretamente nesse variável chamada "resultado". A função modifica a variável informada para que ela fique com o valor resultante do cálculo.

Na linha 17:

Como a função potencia recebe um endereço de memória que tem um número inteiro. Não podemos passar diretamente o inteiro para ela, precisamos passar o endereço onde o inteiro está. Para captar o endereço de uma variável, colocamos um "&" antes dela. Por isso a função está sendo chamada como

potencia(&resultado, 10, 5);