• 0
Sign in to follow this  
Castro

Ponteiro Para Função

Question

: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ê.

Share this post


Link to post
Share on other sites

1 answer to this question

Recommended Posts

  • 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.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this