Ir para conteúdo
Fórum Script Brasil
  • 0

Ponteiro Para Função


Castro

Pergunta

:D

Considerem, a duas versões do mesmo programa. Ambas funcionam. Foram postas apenas para ilustrar a duvida, e facilitar a resposta.

Versão 1:

#include <stdio.h>
#include <stdlib.h>
void Escrevenum(int (*func)(int*, int*, int*) );
int Textonum(int* num1, int* num2, int* num3 );
int main ()

{

   int (*p)(int*, int*, int*); /* Cria ponteiro para a função e define seu
   parametro como tipo char*/
   p = Textonum; /* Atribui a função texto ao ponteiro p*/
   Escrevenum( p ); 
   /* Passa ponteiro para a função como referencia*/
   system ("pause");
   return 0;

}
void Escrevenum( int (*func)(int*, int*, int*) )

{
     int a=1,b=2,c=3;
     func(&a, &b, &c); 
   
   /* Executa função que foi passada como referencia */
   
   return;
}

int Textonum(int* num1, int* num2, int* num3 )
{
   printf("%d %d %d\n", *num1, *num2, *num3);
   return (0);    
}
Versão 2:
#include <stdlib.h>
void Escrevenum(int (*func)(int, int, int) );
int Textonum(int num1, int num2, int num3 );
int main ()

{

   int (*p)(int, int, int); /* Cria ponteiro para a função e define seu
   parametro como tipo char*/
   p = Textonum; /* Atribui a função texto ao ponteiro p*/
   Escrevenum( p ); 
   /* Passa ponteiro para a função como referencia*/
   system ("pause");
   return 0;

}
void Escrevenum( int (*func)(int, int, int) )

{
     func(1, 2, 3); 
   
   /* Executa função que foi passada como referencia */
   
   return;
}
int Textonum(int num1, int num2, int num3 )
{
   printf("%d %d %d\n", num1, num2, num3);
   return (0);    
}

Como dito acima, ambas funcionam, entretanto, se diz, que a versão mais correta, é a segunda, isto porque o correto, seria usar ponteiros com parâmetros, quando se usa strings ou tipo char, e não com tipos numéricos. Gostaria de saber o porquê.

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Na minha opniao as duas implementacoes estao corretas. Se voce passa um ponteiro para uma variavel ou o valor dela depende do que voce quer fazer com essa variavel. Talvez digam isso porque no seu caso, a sua funcao não precisaria ter direito de manipular o valor dos dados e deveria simplesmente imprimi-los. Mas muitas vezes voce precisa passar um ponteiro para um inteiro, para, por exemplo, controlar o resultado final de uma funcao recursiva. O proprio scanf recebe ponteiros para int pois de outra forma não é possivel que ele carregue suas variaveis.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...