Buscar

PONTEIRO PARA FUNÇÃO Vimos nas seções anteriores, que as variáveis são espaços reservados da memória utilizados para guardar nossos dados. ...

PONTEIRO PARA FUNÇÃO Vimos nas seções anteriores, que as variáveis são espaços reservados da memória utilizados para guardar nossos dados. Já um programa é, na verdade, um conjunto de instruções armazenadas na memória, juntamente com seus dados. Vimos também que uma função nada mais é do que um bloco de código (ou seja, declarações e outros comandos) que podem ser nomeado e chamado de dentro de um programa. Uma função também é um conjunto de instruções arma- zenadas na memória. Portanto, podemos acessar uma função por meio de um ponteiro que aponte para onde a função está na memória. A principal vantagem de se declarar um ponteiro para uma função é a construção de códigos genéricos. Pense na ordenação de números: po- demos definir um algoritmo que ordene números inteiros e querer reutili- zar essa implementação para ordenar outros tipos de dados (por exemplo, strings). Ao invés de reescrever toda a função de ordenação, nós pode- mos passar para esta função o ponteiro da função de comparação que desejamos utilizar para cada tipo de dado. Ponteiros permitem fazer uma chamada indireta à função e passá-la como parâmetro para outras funções. Isso é muito útil na implementação de algoritmos genéricos em C. DECLARANDO UM PONTEIRO PARA FUNÇÃO Em linguagem C, a declaração de um ponteiro para uma função segue a seguinte forma geral: tipo retornado (*nome do ponteiro)(lista de tipos); O nome do ponteiro deve sempre ser colocado entre parênteses juntamente com o asterisco: (*nome do ponteiro). Isso é necessário para evitar confusões com a declaração de funções que retornem ponteiros. Por exemplo, tipo retornado *nome da função(lista de parâmetros); é uma função que retorna um ponteiro do tipo retornado, enquanto tipo retornado (*nome do ponteiro)(lista de tipos); é um ponteiro para funções que retornam tipo retornado. Um ponteiro para funções só pode apontar para funções que possuam o mesmo protótipo. Temos agora que nome do ponteiro é um ponteiro para funções. Mas não para qualquer função. Apenas para funções que possuam o mesmo protótipo definido para o ponteiro. Assim, se declararmos um ponteiro para funções como sendo int (*ptr)(int, int); ele poderá ser apontado para qualquer função que receba dois parâmetros inteiros (independente de seus nomes) e retorne um valor inteiro: int soma(int x, int y); APONTANDO UM PONTEIRO PARA UMA FUNÇÃO Ponteiros não inicializados apontam para um lugar indefi- nido. Como qualquer outro ponteiro, quando um ponteiro de função é declarado ele não possui um endereço associado. Qualquer tentativa de uso desse ponteiro causa um comportamento indefinido no programa. O ponteiro para função também pode ser inicializado com a constante NULL, o que indica que aquele ponteiro aponta para uma posição de memória inexis- tente, ou seja, nenhuma função. O nome de uma função é seu endereço na memória. Basta atribuı́-lo ao ponteiro para que o ponteiro aponte para a função na memória. O operador de & não é necessário. Lembre-se, quando criamos uma função, o computador a guarda em um espaço reservado de memória. Ao nome que damos a essa função o com- putador associa o endereço do espaço que ele reservou na memória para guardar essa função. Assim, basta atribuir o nome da função ao ponteiro para que o ponteiro passe a apontar para a função na memória (linha 12 do exemplo anterior). Para usar a função apontada por um ponteiro, basta utilizar o nome do ponteiro como se ele fosse o nome da função. Pode-se ver um exemplo de uso da função apontada na linha 13 do exem- plo anterior. Nele, utilizamos o ponteiro p como se ele fosse um outro nome, ou um sinônimo, para a função max(). Abaixo é possı́vel ver outro exemplo de uso de ponteiros para funções: PASSANDO UM PONTEIRO PARA FUNÇÃO COMO PARÂMETRO Como dito anteriormente, a principal vantagem de se declarar um ponteiro para uma função é que eles permitem a construção de códigos genéricos. Isso ocorre porque esses ponteiros permitem fazer uma chamada indireta à função, de modo que eles podem ser passados como parâmetro para outras funções. Vamos lembrar de como é a declaração de um ponteiro para uma função. A sua forma geral é tipo retornado (*nome do ponteiro)(lista de tipos); Agora, se quisermos declarar

💡 1 Resposta

User badge image

Ed Verified user icon

Parece que você está compartilhando um trecho de um material de estudo sobre ponteiros para função em linguagem C. Como posso te ajudar com isso?

0
Dislike0

✏️ Responder

SetasNegritoItálicoSublinhadoTachadoCitaçãoCódigoLista numeradaLista com marcadoresSubscritoSobrescritoDiminuir recuoAumentar recuoCor da fonteCor de fundoAlinhamentoLimparInserir linkImagemFórmula

Para escrever sua resposta aqui, entre ou crie uma conta

User badge image

Outros materiais