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

Exercício de ponteiros no Visual Studio

Olá, eu programo em c no visual studio, mas recentemente não estou conseguindo usar os ponteiros corretamente, inclusive no ultimo exercício de a + b que daria o resultado *num não dá certo. segue o meu código inteiro do visual abaixo:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

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

int main() {

    int a;
    int b;

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

    printf("%d + %d = %d", a, b, &num);

    getche();
}

Ele dá o erro C4700 dizendo que as variáveis "a" e "b" estão sendo usadas e não estão sendo inicializadas. Quem puder ajudar agradeço.

6 respostas
solução!

Bom dia Renan, tudo bom?

Acontece exatamente isso que o erro descreve. Na função main vc declara duas variáveis (A e B) mas vc nunca atribui nenhum valor para elas. Ou seja, elas nunca são inicializadas.

Além disso, você está passando a ordem dos parâmetros para o método soma na ordem errada.

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

Veja que a soma pede primeiro uma variável que será utilizada para guardar o resultado da soma dos outro dois parâmetros. Ou seja, a sua chamada dever ser a seguinte: soma( &num, a, b);

Bom dia Ricardo, tudo bem? Eu consegui consertar, porém não dá certo com as outras 2 variáveis (a e b) fora do método, imagino que teria que criar ponteiro para elas também, em fim o código ficou assim:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

void soma(int* num) {
    int a;
    int b;
    scanf("%d", &a);
    scanf("%d", &b);
    *num = a + b;
    printf("%d + %d = %d", a, b, *num);
}

int main() {
    int num;

    soma(&num);

    getche();
}

Imagino que o exercício em questão esteja resolvido, obrigado.

Renan,

Não entendi seu problema. O que não funciona agora?

Não funciona se eu declarar as váriaveis a e b no main, mas no meu teste não há a necessidade, só perguntei se o exercício está correto, e se eu precisasse declarar essas variáveis no main teria que ser em ponteiro também? (Usando o * e o &)

Não precisaria de ponteiro não. Vc pode passar o valor delas por cópia mesmo

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

void soma(int* num, int a, int b) {
    *num = a + b;
    printf("%d + %d = %d", a, b, *num);
}

int main() {
    int num;
    int a;
    int b;

    scanf("%d", &a);
    scanf("%d", &b);
    soma(&num, a, b);

    getche();
}

Ah entendi, obrigado ;)