Deklarere funksjonspekere
Pekere til funksjoner
Deklarere funksjonspekere er en gratis leksjon i C Academy på CoddyKit. Dette er leksjon 1 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i C Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i C Academy inneholder totalt 4 leksjoner.
Funksjoner har adresser
Akkurat som data ligger hver funksjon på en adresse i minnet. En funksjonspeker lagrer denne adressen, slik at De kan kalle funksjonen indirekte.
#include <stdio.h>
void greet(void) { printf("hello\n"); }
int main(void) {
void (*fp)(void) = greet;
fp();
return 0;
}Lese deklarasjonen
Deklarasjonen int (*fp)(int) betyr: fp er en peker til en funksjon som tar en int og returnerer en int.
Parentesene rundt *fp er obligatoriske.
#include <stdio.h>
int square(int x) { return x * x; }
int main(void) {
int (*fp)(int) = square;
printf("%d\n", fp(5));
return 0;
}Tilordne en funksjon
Et funksjonsnavn konverteres til adressen sin, så fp = square og fp = &square er ekvivalente.
#include <stdio.h>
int dbl(int x) { return x * 2; }
int main(void) {
int (*fp)(int);
fp = &dbl;
printf("%d\n", fp(7));
return 0;
}Kalle gjennom pekeren
De kan kalle gjennom en funksjonspeker med fp(args) eller den eksplisitte formen (*fp)(args). Begge gjør det samme.
#include <stdio.h>
int add1(int x) { return x + 1; }
int main(void) {
int (*fp)(int) = add1;
printf("%d\n", fp(10));
printf("%d\n", (*fp)(10));
return 0;
}Signaturen må samsvare
Typen til en funksjonspeker omfatter returtypen og parametertypene. De kan bare tilordne en funksjon med en signatur som samsvarer nøyaktig.
#include <stdio.h>
double half(double x) { return x / 2.0; }
int main(void) {
double (*fp)(double) = half;
printf("%f\n", fp(9.0));
return 0;
}Tilordne på nytt under kjøring
En funksjonspeker er en variabel, så De kan la den peke på forskjellige funksjoner mens programmet kjører.
#include <stdio.h>
int inc(int x) { return x + 1; }
int dec(int x) { return x - 1; }
int main(void) {
int (*op)(int) = inc;
printf("%d\n", op(5));
op = dec;
printf("%d\n", op(5));
return 0;
}Velge basert på en betingelse
Velg hvilken funksjon som skal kalles, basert på en verdi under kjøring, og kall den deretter gjennom én peker.
#include <stdio.h>
int plus(int a) { return a + 10; }
int minus(int a) { return a - 10; }
int main(void) {
int up = 1;
int (*op)(int) = up ? plus : minus;
printf("%d\n", op(100));
return 0;
}typedef for bedre lesbarhet
Syntaksen for funksjonspekere er omstendelig. En typedef gir typen et navn, slik at deklarasjonene blir tydeligere.
#include <stdio.h>
typedef int (*IntOp)(int);
int triple(int x) { return x * 3; }
int main(void) {
IntOp op = triple;
printf("%d\n", op(4));
return 0;
}Funksjoner med to argumenter
Funksjonspekere kan beskrive enhver signatur. Her er et eksempel på en funksjon for en binær heltallsoperasjon.
#include <stdio.h>
int sum(int a, int b) { return a + b; }
int main(void) {
int (*op)(int, int) = sum;
printf("%d\n", op(3, 4));
return 0;
}En NULL-funksjonspeker
Akkurat som datatypens pekere kan en funksjonspeker være NULL. Kontroller alltid før De kaller en peker som kanskje ikke er satt.
#include <stdio.h>
int twice(int x) { return x * 2; }
int main(void) {
int (*op)(int) = NULL;
if (op == NULL) op = twice;
if (op) printf("%d\n", op(8));
return 0;
}Skrive ut adressen
De kan undersøke den lagrede adressen. Forskjellige funksjoner har forskjellige adresser.
#include <stdio.h>
int f(int x) { return x; }
int main(void) {
int (*fp)(int) = f;
printf("function pointer is %s\n", fp ? "set" : "null");
return 0;
}Rask kontroll
Test forståelsen Deres av deklarasjoner av funksjonspekere.
Oppsummering
De har lært å deklarere og bruke funksjonspekere:
- Syntaks:
ret (*name)(params)med obligatoriske parenteser. - Tilordne med funksjonsnavnet (det konverteres til en adresse).
- Kall med
fp(args)eller(*fp)(args). - Signaturen må samsvare.
typedefgjør koden mer lesbar.
Lær deg C med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 39
- Leksjoner
- 144
Ofte stilte spørsmål
Er leksjonen «Deklarere funksjonspekere» gratis?
Ja – hele teksten i «Deklarere funksjonspekere» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av C Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i C Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Deklarere funksjonspekere»?
Pekere til funksjoner Du øver på C Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med C Academy?
Ingen tidligere erfaring er nødvendig. C Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.
Hvor lang tid tar leksjonen «Deklarere funksjonspekere»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne C Academy-leksjonen?
Ja. Alle C Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Deklarere funksjonspekere
- Sende funksjoner
- qsort med sammenligningsfunksjoner
- Tabeller med funksjonspekere