sábado, 7 de março de 2015

Ponteiro para função

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();
}

Nenhum comentário:

Postar um comentário

Observação: somente um membro deste blog pode postar um comentário.