Bons programadores em C tem pleno domínio em ponteiros, e isto é o que diferencia um bom programador em linguagem C, porque o C é altamente dependente de ponteiros.
O C possui um recurso complexo e avançado onde denomina-se ponteiro para função, que na realidade consiste em passar uma função como parâmetro para outra.
Para criar um ponteiro para função se espelhe no exemplo abaixo:
int ( *exemplo ) ();Veja que é usado parênteses nos nomes das variáveis, e é bem parecido com a declaração de função que retorna ponteiro, só precisaria retirar os parênteses.
Sabemos que função não é variável, más o C reserva uma posição plena na memória onde permite o recebimento de um ponteiro, sendo assim um uso justo do ponteiro chamando uma função específica. Poderia falar mais sobre o assunto más deixaria o tópico enfadonho e complicado, por isso nada melhor que entrarmos num ótimo exemplo para mostrar como a coisa funciona.
Veja abaixo imagens do programa em execução:
Veja abaixo o código do programa:
#include <conio.h>
#include <stdio.h>
void Janela5(){
int lin, col;
col = 0;
for ( lin = 2; lin <= 24; lin++ )
for ( col = 2; col <= 78; col++ ){
gotoxy(col,lin);textbackground(LIGHTGRAY);printf(" ");
}
}
void Fim_nal(){
Sleep(1800);textcolor(BLACK);gotoxy(30,21);printf ("Criado por: Samuel Lima ");
textcolor(LIGHTRED);gotoxy(36,23);
printf ("MUITO OBRIGADO");getche();exit(0);
}
int Pesq_Num_Vet ( const int Vet [ ], const int y ){
int i = 0; int ok = 0;
while( ( i < 15 ) && ( !ok ) )
if( Vet [ i ] == y )
ok = 1;
else
i++;
if( i < 15 ){
textcolor(LIGHTBLUE);gotoxy(23,9);printf("O valor ");
textcolor(LIGHTRED);printf("%d", y);
textcolor(LIGHTBLUE);printf(" esta no ");
textcolor(LIGHTRED);printf("%d°", i);
textcolor(LIGHTBLUE);printf(" lugar do vetor");
getche();return 1;
}
else{
textcolor(LIGHTBLUE);gotoxy(23,9);printf("O vetor não possui o valor ");
textcolor(LIGHTRED);printf("%d", y);
getche();return 0;
}
}
int Test_Num_Vet ( const int Vet [ ], const int y, int ( *Test ) ( const int *, const int ) ){
textcolor(LIGHTBLUE);gotoxy(23,7);printf ("testando o número ");
textcolor(LIGHTRED);printf ("%d ...", y );
if( ! ( *Test ) ( Vet, y ) )
if ( *Vet == y ){}
else {
textcolor(LIGHTBLUE);gotoxy(23,11);
printf ("É, realmente este valor ");
textcolor(LIGHTRED);printf("%d", y);
textcolor(LIGHTBLUE);printf(" não existe no vetor");
Fim_nal();
}
textcolor(LIGHTBLUE);gotoxy(23,11);printf ("\aOpa!! o valor ");
textcolor(LIGHTRED);printf ("%d ", y);
textcolor(LIGHTBLUE);gotoxy(23,13);printf ("realmente existe no vetor");
Fim_nal();return(0);
}
int main(){
system ("title FUNÇÃO PARA PONTEIRO");
int Vet [ ] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
int y; Janela5();
textcolor(LIGHTRED);gotoxy(33,3);printf("FUNÇÃO PARA PONTEIRO");
textcolor(LIGHTBLUE);gotoxy(23,5);printf ("Digite um número para pesquisar ");
textcolor(LIGHTRED);scanf("%d", &y );fflush ( stdin );
Test_Num_Vet ( Vet, y, Pesq_Num_Vet );
getche();
}
O C possui um recurso complexo e avançado onde denomina-se ponteiro para função, que na realidade consiste em passar uma função como parâmetro para outra.
Para criar um ponteiro para função se espelhe no exemplo abaixo:
int ( *exemplo ) ();Veja que é usado parênteses nos nomes das variáveis, e é bem parecido com a declaração de função que retorna ponteiro, só precisaria retirar os parênteses.
Sabemos que função não é variável, más o C reserva uma posição plena na memória onde permite o recebimento de um ponteiro, sendo assim um uso justo do ponteiro chamando uma função específica. Poderia falar mais sobre o assunto más deixaria o tópico enfadonho e complicado, por isso nada melhor que entrarmos num ótimo exemplo para mostrar como a coisa funciona.
Veja abaixo imagens do programa em execução:
Veja abaixo o código do programa:
#include <conio.h>
#include <stdio.h>
void Janela5(){
int lin, col;
col = 0;
for ( lin = 2; lin <= 24; lin++ )
for ( col = 2; col <= 78; col++ ){
gotoxy(col,lin);textbackground(LIGHTGRAY);printf(" ");
}
}
void Fim_nal(){
Sleep(1800);textcolor(BLACK);gotoxy(30,21);printf ("Criado por: Samuel Lima ");
textcolor(LIGHTRED);gotoxy(36,23);
printf ("MUITO OBRIGADO");getche();exit(0);
}
int Pesq_Num_Vet ( const int Vet [ ], const int y ){
int i = 0; int ok = 0;
while( ( i < 15 ) && ( !ok ) )
if( Vet [ i ] == y )
ok = 1;
else
i++;
if( i < 15 ){
textcolor(LIGHTBLUE);gotoxy(23,9);printf("O valor ");
textcolor(LIGHTRED);printf("%d", y);
textcolor(LIGHTBLUE);printf(" esta no ");
textcolor(LIGHTRED);printf("%d°", i);
textcolor(LIGHTBLUE);printf(" lugar do vetor");
getche();return 1;
}
else{
textcolor(LIGHTBLUE);gotoxy(23,9);printf("O vetor não possui o valor ");
textcolor(LIGHTRED);printf("%d", y);
getche();return 0;
}
}
int Test_Num_Vet ( const int Vet [ ], const int y, int ( *Test ) ( const int *, const int ) ){
textcolor(LIGHTBLUE);gotoxy(23,7);printf ("testando o número ");
textcolor(LIGHTRED);printf ("%d ...", y );
if( ! ( *Test ) ( Vet, y ) )
if ( *Vet == y ){}
else {
textcolor(LIGHTBLUE);gotoxy(23,11);
printf ("É, realmente este valor ");
textcolor(LIGHTRED);printf("%d", y);
textcolor(LIGHTBLUE);printf(" não existe no vetor");
Fim_nal();
}
textcolor(LIGHTBLUE);gotoxy(23,11);printf ("\aOpa!! o valor ");
textcolor(LIGHTRED);printf ("%d ", y);
textcolor(LIGHTBLUE);gotoxy(23,13);printf ("realmente existe no vetor");
Fim_nal();return(0);
}
int main(){
system ("title FUNÇÃO PARA PONTEIRO");
int Vet [ ] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
int y; Janela5();
textcolor(LIGHTRED);gotoxy(33,3);printf("FUNÇÃO PARA PONTEIRO");
textcolor(LIGHTBLUE);gotoxy(23,5);printf ("Digite um número para pesquisar ");
textcolor(LIGHTRED);scanf("%d", &y );fflush ( stdin );
Test_Num_Vet ( Vet, y, Pesq_Num_Vet );
getche();
}
Nenhum comentário:
Postar um comentário
Observação: somente um membro deste blog pode postar um comentário.