Puntatori di funzioni in c

Puntatori di funzioni in c
I puntatori sono una caratteristica chiave del linguaggio di programmazione C che offre il controllo diretto del programmatore della memoria utilizzata nel programma. Le funzioni sono tecniche e sintassi comuni nella programmazione C per creare blocchi di codice riutilizzabili e chiamarle in diverse situazioni. Questo tutorial di Linux Dink descrive i puntatori della funzione nel linguaggio di programmazione C.

Un puntatore di funzione è una normale variabile del puntatore C, ma ciò a cui indica è una funzione. Ciò consente programmi fantasiosi e dinamici che chiameranno diverse funzioni in diverse circostanze in base a quale funzione mai indica il puntatore in quel momento. Il programmatore crea la logica per modificare il valore del puntatore a varie funzioni per diversi motivi e le chiamate che funzionano mai sono indicate dal puntatore. Dimostriamo questo con alcuni esempi.

Panoramica tecnica

Copriremo la sintassi dei puntatori della funzione. Ci farà sapere come possiamo causare il puntatore a indicare una funzione; In altre parole, come possiamo archiviare l'indirizzo della funzione usando il puntatore. Impareremo anche la dichiarazione e il riferimento del puntatore della funzione e come i puntatori della funzione possono essere utilizzati per effettuare la funzione richiede la funzione puntatore.

Sintassi

La sintassi generale per la dichiarazione del puntatore della funzione è la seguente:

$ Return tipo di funzione (* nome puntatore) (tipo di dati AR_1, tipo di dati arg_2)

Il metodo di dichiarazione del puntatore della funzione è uguale alla solita Dichiarazione della funzione; L'unica differenza nel puntatore della funzione è quando dichiariamo il nome del puntatore della funzione, usiamo il simbolo * e la variabile è inclusa nella parentesi, a differenza della funzione normale in cui il nome viene dichiarato senza l'uso di alcun simbolo con essa. Dichiariamo un puntatore della funzione fittizia con l'aiuto di un esempio ipotetico; Innanzitutto, dichiarare qualsiasi funzione con il metodo abituale, E.G., int func (int, int). Dopo la dichiarazione di funzione Func, Dichiareremo ora un puntatore di funzione come int (*funcptr) (int, int);. Ecco la sintassi generale e l'assegnazione di una funzione a un puntatore di funzione:

// Dichiarazione della funzione
int func (int, int);
// Dichiarazione del puntatore della funzione
int (*funcptr) (int, int);
// Assegnazione del puntatore della funzione
funcptr = func;

Esempio # 01

In questo esempio creeremo una funzione chiamata piazza con 2 parametri per il calcolo di Len e larghezza di un rettangolo. [len * larghezza = area]. Dichiariamo quindi un puntatore della funzione e assegniamo l'indirizzo del piazza funzione al puntatore della funzione chiamato sp. Dopo aver ricevuto gli input utente dinamici chiamiamo la funzione utilizzando il puntatore della funzione per effettuare l'esecuzione delle chiamate della funzione.

Nel corpo della funzione, prenderemo semplicemente la moltiplicazione di entrambe le variabili len E larghezza per calcolare il la zona del rettangolo ed esci dalla funzione che restituisce quest'area. L'implementazione degli esempi è mostrata nel seguente frammento:

#includere
int Square (int len, int width)
int area = len * larghezza;
area di ritorno;

int main ()
int l, w, area;
int (*sp) (int, int);
printf ("Immettere la lunghezza e l'ampiezza di un rettangolo:");
scanf ("%d%d", & l, & w);
// Assegna la funzione al puntatore della funzione
sp = quadrato;
// Chiama il puntatore della funzione
area = (*sp) (l, w);
printf ("area del rettangolo = %d \ n", area);
restituzione 0;
linuxhint@: ~ $ ./func
Immettere la lunghezza e l'ampiezza di un rettangolo: 10 4
Area del rettangolo = 40
Linuxhint@: ~ $

Abbiamo dato lo stesso input dell'utente per entrambe le variabili L e W come "5" poiché entrambi rappresentano la lunghezza e la larghezza del quadrato, che hanno un valore uguale. L'uscita ha restituito il quadrato del valore 5 come area del quadrato.

Esempio # 02

Con l'aiuto di questo esempio, creeremo una serie di puntatori di funzioni in cui ogni elemento dell'array memorizzerà la funzione puntatore per diverse funzioni. Ad esempio, dichiarare le due normali funzioni di sottrazione e aggiunta con il tipo di restituzione intero con due parametri della funzione con il tipo di dati interi. Quindi dichiarare una serie di puntatori di funzioni e quindi inizializzare i due membri dell'array con le nostre due funzioni dichiarate per l'aggiunta e la sottrazione. Quindi useremo l'array di funzione puntatore con l'indice del puntatore della funzione array, e.G., "Arr [i]".

Le funzioni di aggiunta e sottrazione utilizzerà i valori di lettura delle variabili inizializzate UN E B. Visualmente visualizzeremo questi risultati chiamando il metodo printf (). Il seguente frammento mostra il programma completo per questo esempio:

#includere
int addition (int a, int b)
restituire a + b;
int sottraction (int a, int b)
restituire a - b;
int main ()
int a, b;
int (*funzione [2]) (int, int);
funzione [0] = aggiunta;
funzione [1] = sottrazione;
printf ("Immettere due valori:");
scanf (" %d %d", & a, & b);
int risultato = (*funzione [0]) (a, b);
printf ("aggiunta (a+b) = %d \ n", risultato);
risultato = (*funzione [1]) (a, b);
printf ("sottraction (a-b) = %d \ n", risultato);
restituzione 0;
linuxhint@: ~ $ ./func
Immettere due valori: 33
11
Aggiunta (a+b) = 44
Sottrazione (A-B) = 22
Linuxhint@: ~ $

Conclusione

La guida contiene un esempio di base e una spiegazione dei puntatori della funzione nella lingua C. Nota per modificare la sintassi mentre si modifica la quantità dei parametri e il tipo di dati, nonché se si modifica il tipo di ritorno della funzione che il puntatore della funzione dovrà cambiare rispettivamente.