Pular para o conteúdo

retorno de ponteiro [RESOLVIDO]

Responder tópico
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
  • Denunciar
  • Indicar

1. retorno de ponteiro [RESOLVIDO]

Enviado em 17/01/2022 - 16:52h

fala pessoal, bl?
então estava dando uma estudada em retorno de função, até que vi uma aula sobre retorno de função com ponteiro.
exemplo:

#include <stdio.h>
#include <stdlib.h>
void recebe(int *num){
*num = *num * 2;

}
int main(){
int send=15;
printf("%d\n", recebe(&send));

return EXIT_SUCCESS;
}


mas o problema é que esse codigo não compila, e eu não sei o que pode ser, não sei se isso pode ser incompatibilidade tambem
porque eu uso linux, meu professor usa windows

Responder tópico

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

2. Re: retorno de ponteiro

Melhor resposta

Enviado em 17/01/2022 - 21:59h

Ameba, você está misturando (e confundindo) o uso de ponteiros com o retorno de funções. Uma função só pode ser colocada dentro de um printf se ela retornar algum valor (afinal precisa imprimir alguma coisa, né?). Como a sua função não retorna nada, ou seja, ela é void, então não pode ser colocada no printf.

Segundo ponto, sua função recebe um ponteiro e o resultado da operação fica armazenado no endereço de memória do próprio ponteiro. Dessa forma, assim que esse resultado for atribuído, a variável lá na função main vai ter o resultado alterado (afinal, é o mesmo endereço de memória, mas agora com um valor diferente). Diante disso, você só precisa imprimir a variável e verá o novo valor.

Veja seu código com alguns comentários:
#include <stdio.h>
#include <stdlib.h>

void funcao(int *ponteiro){
// O resutado fica armazanado no endereco do proprio ponteiro
*ponteiro = *ponteiro * 2;
}

int main(){
int variavel = 15;

// Passa o endereco de memoria da variavel
// A funcao nao retorna nada, entao nao pode chamar dentro do printf
funcao(&variavel);

// Como o resultado esta no endereco da variavel
// apenas exibimos o valor dela
printf("%d\n", variavel);

return EXIT_SUCCESS;
}

3. Re: retorno de ponteiro [RESOLVIDO]

Enviado em 17/01/2022 - 18:03h


Ameba escreveu:

fala pessoal, bl?
então estava dando uma estudada em retorno de função, até que vi uma aula sobre retorno de função com ponteiro.
exemplo:

#include <stdio.h>
#include <stdlib.h>
void recebe(int *num){
*num = *num * 2;

}
int main(){
int send=15;
printf("%d\n", recebe(&send));

return EXIT_SUCCESS;
}


mas o problema é que esse codigo não compila, e eu não sei o que pode ser, não sei se isso pode ser incompatibilidade tambem
porque eu uso linux, meu professor usa windows

O retorno de toda função em C é declarado a esqierda do nome da função:
TIPO_RETORNO nomeFuncao( parametros)
Exemplo:
int soma(int a, int b){
return a + b;//função retorna um inteiro
}
void somaComPonteiro(int a, int b, int *resultado) {
*resultado = a + b;//soma a + b no endereço de resultado
//esta função não retorna nada, veja o void (vazio) dela
}

Quando uma função é clerada sem ser como void, significa que ela faz algo e então retorna um valor:
int soma(int a, int b) // vai retornar a soma de a e b
void somaEImprime(int a, int b)//vai somar e imprimir o resultado na saída

Por tanto, aquele seu printf("%d\n", recebe(&send)); está errado porque a função "recebe" não retorna nada, ela apenas faz uma operação interna no parâmetro send.
void recebe(int *num){
//apenas usa o valor do endereço de num e multiplica por 2 e então salva em num novamente
*num = *num * 2;
//não retorna nada
}

4. Re: retorno de ponteiro [RESOLVIDO]

Enviado em 17/01/2022 - 23:04h


adrisiq escreveu:

Ameba, você está misturando (e confundindo) o uso de ponteiros com o retorno de funções. Uma função só pode ser colocada dentro de um printf se ela retornar algum valor (afinal precisa imprimir alguma coisa, né?). Como a sua função não retorna nada, ou seja, ela é void, então não pode ser colocada no printf.

Segundo ponto, sua função recebe um ponteiro e o resultado da operação fica armazenado no endereço de memória do próprio ponteiro. Dessa forma, assim que esse resultado for atribuído, a variável lá na função main vai ter o resultado alterado (afinal, é o mesmo endereço de memória, mas agora com um valor diferente). Diante disso, você só precisa imprimir a variável e verá o novo valor.

Veja seu código com alguns comentários:
#include <stdio.h>
#include <stdlib.h>

void funcao(int *ponteiro){
// O resutado fica armazanado no endereco do proprio ponteiro
*ponteiro = *ponteiro * 2;
}

int main(){
int variavel = 15;

// Passa o endereco de memoria da variavel
// A funcao nao retorna nada, entao nao pode chamar dentro do printf
funcao(&variavel);

// Como o resultado esta no endereco da variavel
// apenas exibimos o valor dela
printf("%d\n", variavel);

return EXIT_SUCCESS;
}


Era isso mesmo, obrigado

Responder tópico

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Responder tópico

Entre na sua conta para responder.

Fazer login para responder