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

Meu código funcionou, mas alguem sabe me explicar as diferenças com o do resultado?

Esse foi o meu código:

#include <stdio.h>

void soma(int* resultado, int* first, int* second){

(*resultado) = (*first) + (*second);

}

int main(){
    int num = 0;
    int a = 5;
    int b = 4;

    soma(&num, &a, &b);

    printf("O resultado da soma = %d.", num);
}

Essas foi a resposta do exercício:

void soma(int* num, int a, int b) {
    *num = a + b;
}

Ok eu entendi que o num é o único que precisa ser alterado fora da função então não precisa criar toda a infraestrutura para alterar os outros.

Mas exatamente pq não precisou colocar a variável dentro de um ()? Acho que o instrutor falou na aula que isso era necessário para evitar que o programa busque o numero do endereço da memória ao invés do valor da variável.

1 resposta
solução!

Olá Alves, tudo bem ? Espero que sim.

Desculpa pela demora no retorno.

O uso do parênteses é só por convenção mesmo, com ele podemos deixar claro o que queremos que ocorra.

Por exemplo:

#include <stdio.h>

int teste1(int* a){

    return *(a + 1);

}

int teste2(int* a){

    return *(a) + 1;

}

int main(){

    int a = 10;
    int b = 5;

    printf("teste1: %d\n", teste1(&a));

    printf("teste2: %d\n", teste2(&a));

    return 0;
}

Saída:

PS C:\Users\igor_\Desktop\teste> gcc .\main.c -o exec
PS C:\Users\igor_\Desktop\teste> .\exec.exe
teste1: 5
teste2: 11

No teste 1, primeiro é somando um inteiro no endereço de memoria da variável a e isso quer dizer, andar para próximo endereço de memoria , que no caso é a variável b, então depois o asterisco acessa o valor dentro desse endereço, que é o valor 5.

O teste 2, o asterisco acessa o valor dentro desse endereço memoria que é o da variável a, que é o valor 10 e então soma 1.

Veja que o parênteses se mostra útil em situações mais complexas, porem é conveniente sempre utilizar e assim garantir que as instruções vão acontecer como pretendido e que fique claro para quem ler seu código.

Por exemplo, retirando o parênteses não fica claro o que vai acontecer primeiro:

int teste3(int* a){

    return *a + 1;

}

Espero que meu exemplo tenha ajudado no entendimento, mas qualquer duvida não hesite em perguntar.

Bons Estudos.