Funksjonspekere i C

Funksjonspekere i C
Pekere er et sentralt trekk ved C -programmeringsspråk som gir deg programmererens direkte kontroll av minnet som brukes i programmet. Funksjoner er vanlig teknikk og syntaks i C -programmering for å lage gjenbrukbare kodeblokker og kalle dem i forskjellige situasjoner. Denne Linux -hintopplæringen beskriver funksjonspekere på C -programmeringsspråk.

En funksjonspeker er en normal C -pekervariabel, men det den peker på er en funksjon. Dette gir mulighet for fancy og dynamiske programmer som vil kalle forskjellige funksjoner under forskjellige omstendigheter dynamisk basert på hvilken som noen gang fungerer pekeren, peker på på den tiden. Programmereren skaper logikk for å endre pekeren verdien til forskjellige funksjoner av forskjellige grunner, og samtaler som noen gang funksjon peker på av pekeren. La oss demonstrere dette med noen eksempler.

Teknisk oversikt

Vi vil dekke syntaks for funksjonspekere. Det vil gi oss beskjed om hvordan vi kan føre til at pekeren peker på en funksjon; Med andre ord, hvordan vi kan lagre adressen til funksjonen ved hjelp av pekeren. Vi vil også lære erklæringen og referansen til funksjonspekeren og hvordan funksjonspekerne kan brukes til å gjøre funksjonen til å ringe pekeren funksjon.

Syntaks

Den generelle syntaksen for erklæringen om funksjonspekeren er som følger:

$ Returtype av funksjon (* pekernavn) (datatype ar_1, datatype arg_2)

Deklarasjonsmetoden til funksjonspekeren er like den som den vanlige funksjonserklæringen; Den eneste forskjellen i funksjonspekeren er når vi erklærer navnet på funksjonspekeren, vi bruker symbolet * og variabelen er inkludert i parentes, i motsetning til den normale funksjonen der navnet er deklarert uten bruk av noe symbol med det. La oss erklære en dummy -funksjonspeker ved hjelp av et hypotetisk eksempel; Først må du erklære enhver funksjon med den vanlige metoden, e.g., int func (int, int). Etter funksjonserklæringen func, Vi vil nå erklære en funksjonspeker som int (*FuncPtr) (int, int);. Her er den generelle syntaksen og tildelingen av en funksjon til en funksjonspeker:

// funksjonserklæring
int func (int, int);
// Funksjonspekerklæring
int (*FuncPtr) (int, int);
// Funksjonspekeroppdrag
FuncPtr = func;

Eksempel nr. 01

I dette eksemplet vil vi lage en funksjon som heter torget med 2 parametere for beregning av len og bredde av et rektangel. [Len * bredde = område]. Vi erklærer deretter en funksjonspeker og tildeler adressen til torget funksjon til funksjonspekeren som heter sp. Etter å ha mottatt dynamiske brukerinnganger kaller vi funksjonen ved å bruke funksjonspekeren for å gjøre funksjonen for funksjonsanrop.

I funksjonen av funksjonen vil vi ganske enkelt ta multiplikasjonen av begge variablene Len og bredde For å beregne område av rektangelet og avslutte funksjonen som returnerer dette området. Implementeringen av eksemplene er vist i følgende utdrag:

#inkludere
int square (int len, int bredde)
int område = len * bredde;
returområde;

int main ()
int l, w, område;
int (*sp) (int, int);
printf ("Angi lengde og bredde av et rektangel:");
Scanf ("%d%d", & l, & w);
// Tilordne funksjon til funksjonspeker
sp = firkant;
// samtalefunksjonspekeren
område = (*sp) (l, w);
printf ("areal of rektangel = %d \ n", område);
retur 0;
linuxhint@: ~ $ ./func
Angi lengde og bredde på et rektangel: 10 4
Rektangelområde = 40
linuxhint@: ~ $

Vi har gitt den samme brukerinngangen for både variablene L og W som "5" siden de begge representerer lengden og bredden på torget, som er like i verdi. Utgangen har returnert verdien av verdien 5 som området på torget.

Eksempel # 02

Ved hjelp av dette eksemplet vil vi lage en rekke funksjonspekere der hvert element i matrisen lagrer pekerfunksjonen for forskjellige funksjoner. For eksempel vil vi erklære de to normale funksjonene for subtraksjon og tillegg med returtypen heltall med to funksjonsparametere som har heltalldatatypen. Deretter vil vi erklære en rekke funksjonspekere og deretter initialisere de to matrisemedlemmene med våre to funksjoner som er erklært for tillegg og subtraksjon. Deretter vil vi bruke matrisen med pekerfunksjon med indeksen for matrisefunksjonspekeren, e.g., “Arr [i]”.

Tilleggs- og subtraksjonsfunksjonene vil bruke leseverdiene til initialiserte variabler en og b. Vi vil deretter vise disse resultatene ved å kalle printf () -metoden. Følgende utdrag viser det komplette programmet for dette eksemplet:

#inkludere
int tillegg (int a, int b)
returner a + b;
int subtraksjon (int a, int b)
returner a - b;
int main ()
int a, b;
int (*funksjon [2]) (int, int);
funksjon [0] = tillegg;
funksjon [1] = subtraksjon;
printf ("Angi to verdier:");
SCANF (" %D %D", & A, & B);
int resultat = (*funksjon [0]) (a, b);
printf ("tillegg (a+b) = %d \ n", resultat);
resultat = (*funksjon [1]) (a, b);
printf ("subtraksjon (a-b) = %d \ n", resultat);
retur 0;
linuxhint@: ~ $ ./func
Skriv inn to verdier: 33
11
Tillegg (a+b) = 44
Subtraksjon (A-B) = 22
linuxhint@: ~ $

Konklusjon

Guiden inneholder et grunnleggende eksempel og forklaring av funksjonspekere på C -språket. Merk for å endre syntaks når du endrer parametermengde og datatype, så vel som om du endrer returtypen på funksjonen funksjonspekeren trenger å endre henholdsvis.