Ponteiros de função em c

Ponteiros de função em c
Os ponteiros são um recurso essencial da linguagem de programação C, oferecendo o controle direto do programador da memória usada no programa. As funções são técnicas e sintaxe comuns na programação C para criar blocos de código reutilizáveis ​​e chamá -los em diferentes situações. Este tutorial de dica do Linux descreve ponteiros de função na linguagem de programação C.

Um ponteiro de função é uma variável de ponteiro C normal, mas o que aponta é uma função. Isso permite programas sofisticados e dinâmicos que chamarão de diferentes funções em diferentes circunstâncias dinamicamente com base em quais sempre funcionar o ponteiro está apontando naquele momento. O programador cria lógica para alterar o valor do ponteiro para várias funções por diferentes razões, e as chamadas que sempre são apontadas pelo ponteiro. Vamos demonstrar isso com alguns exemplos.

Visão geral técnica

Vamos cobrir a sintaxe dos ponteiros da função. Isso nos informará como podemos fazer com que o ponteiro aponte para uma função; Em outras palavras, como podemos armazenar o endereço da função usando o ponteiro. Também aprenderemos a declaração e a referência do ponteiro da função e como os ponteiros da função podem ser usados ​​para fazer as chamadas de função para a função do ponteiro.

Sintaxe

A sintaxe geral para a declaração do ponteiro da função é a seguinte:

$ Tipo de retorno da função (* Nome do ponteiro) (Tipo de dados AR_1, Tipo de dados Arg_2)

O método da declaração do ponteiro da função é o mesmo que a declaração usual da função; A única diferença no ponteiro da função é quando declaramos o nome do ponteiro da função, usamos o símbolo * e a variável está incluída entre parênteses, diferentemente da função normal, onde o nome é declarado sem o uso de qualquer símbolo com ele. Vamos declarar um ponteiro da função fictícia com a ajuda de algum exemplo hipotético; Primeiro, declare qualquer função com o método usual, e.g., int func (int, int). Após a declaração de função functão, Agora vamos declarar um ponteiro de função como int (*funcptr) (int, int);. Aqui está a sintaxe geral e a atribuição de uma função a um ponteiro de função:

// Declaração da função
int func (int, int);
// Declaração do ponteiro da função
int (*funcptr) (int, int);
// Função de atribuição de ponteiro
funcptr = func;

Exemplo # 01

Neste exemplo, criaremos uma função chamada quadrado com 2 parâmetros para LEN e cálculo de largura de um retângulo. [Len * largura = área]. Em seguida, declaramos um ponteiro de função e atribuímos o endereço do quadrado função para o ponteiro da função chamado sp. Depois de receber entradas dinâmicas do usuário, chamamos a função usando o ponteiro da função para fazer a execução da chamada de função.

No corpo da função, simplesmente levaremos a multiplicação de ambas as variáveis Len e largura Para calcular o área do retângulo e saia da função retornando esta área. A implementação dos exemplos é mostrada no seguinte snippet:

#incluir
int square (int len, int width)
int area = len * largura;
área de retorno;

int main ()
int l, w, área;
int (*sp) (int, int);
printf ("Digite o comprimento e a largura de um retângulo:");
scanf ("%d%d", & l, & w);
// atribui função ao ponteiro da função
sp = quadrado;
// Ponteiro da função de chamada
área = (*sp) (l, w);
printf ("Área do retângulo = %d \ n", área);
retornar 0;
linuxhint@: ~ $ ./func
Digite comprimento e largura de um retângulo: 10 4
Área do retângulo = 40
Linuxhint@: ~ $

Damos a mesma entrada do usuário para as variáveis ​​L e W como "5", pois ambas representam o comprimento e a largura do quadrado, que são iguais em valor. A saída retornou o quadrado do valor 5 como a área do quadrado.

Exemplo # 02

Com a ajuda deste exemplo, criaremos uma variedade de ponteiros de função, onde todos os elementos da matriz estarão armazenando a função de ponteiro para diferentes funções. Por exemplo, declararemos as duas funções normais de subtração e adição com o número inteiro de retorno com dois parâmetros de função com o tipo de dados inteiro. Em seguida, declararemos uma variedade de ponteiros de função e depois inicializaremos os dois membros da matriz com nossas duas funções declaradas para adição e subtração. Em seguida, usaremos a matriz de ponteiro da função com o índice do ponteiro da função da matriz, e.g., "Arr [eu]".

As funções de adição e subtração usarão os valores de leitura de variáveis ​​inicializadas a e b. Em seguida, exibiremos esses resultados chamando o método printf (). O snippet a seguir mostra o programa completo para este exemplo:

#incluir
int adição (int a, int b)
retornar a + b;
Int subtração (int a, int b)
retornar a - b;
int main ()
int a, b;
int (*função [2]) (int, int);
função [0] = adição;
função [1] = subtração;
printf ("Digite dois valores:");
scanf (" %d %d", & a, & b);
int resultado = (*função [0]) (a, b);
printf ("adição (a+b) = %d \ n", resultado);
resultado = (*função [1]) (a, b);
printf ("subtração (a-b) = %d \ n", resultado);
retornar 0;
linuxhint@: ~ $ ./func
Digite dois valores: 33
11
Adição (a+b) = 44
Subtração (a-b) = 22
Linuxhint@: ~ $

Conclusão

O guia contém um exemplo básico e explicação dos ponteiros de função na linguagem C. Nota para alterar a sintaxe à medida que você altera a quantidade de parâmetros e o tipo de dados, bem como se você alterar o tipo de retorno da função que o ponteiro da função precisará alterar, respectivamente.