Deklarera funktionspekare
Pekare till funktioner.
Deklarera funktionspekare är en gratis lektion i C Academy på CoddyKit. Detta är lektion 1 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för C Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i C Academy innehåller totalt 4 lektioner.
Funktioner har adresser
Precis som data finns varje funktion på en adress i minnet. En funktionspekare lagrar den adressen så att Ni kan anropa funktionen indirekt.
#include <stdio.h>
void greet(void) { printf("hello\n"); }
int main(void) {
void (*fp)(void) = greet;
fp();
return 0;
}Läsa deklarationen
Deklarationen int (*fp)(int) betyder: fp är en pekare till en funktion som tar en int och returnerar en int.
Parenteserna runt *fp krävs.
#include <stdio.h>
int square(int x) { return x * x; }
int main(void) {
int (*fp)(int) = square;
printf("%d\n", fp(5));
return 0;
}Tilldela en funktion
Ett funktionsnamn omvandlas till sin adress, så fp = square och fp = &square är likvärdiga.
#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;
}Anropa via pekaren
Ni kan anropa via en funktionspekare med fp(args) eller den explicita formen (*fp)(args). Båda gör samma sak.
#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åste stämma
En funktionspekares typ innehåller returtypen och parametertyperna. Ni kan endast tilldela en funktion vars signatur matchar exakt.
#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;
}Tilldela om under körning
En funktionspekare är en variabel, så Ni kan låta den peka på olika funktioner medan programmet körs.
#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;
}Välja utifrån ett villkor
Välj vilken funktion som ska anropas utifrån ett värde under körning och anropa den sedan via en pekare.
#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 för bättre läsbarhet
Syntaxen för funktionspekare är omständlig. Med typedef får typen ett namn, vilket gör deklarationerna tydligare.
#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;
}Funktioner med två argument
Funktionspekare kan beskriva vilken signatur som helst. Här är en för en binär heltalsoperation.
#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-funktionspekare
Precis som datapekare kan en funktionspekare vara NULL. Kontrollera alltid innan Ni anropar en som kanske inte har satts.
#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;
}Skriva ut adressen
Ni kan granska den lagrade adressen. Olika funktioner har olika 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;
}Snabbtest
Testa Er förståelse av deklarationer av funktionspekare.
Sammanfattning
Ni har lärt Er att deklarera och använda funktionspekare:
- Syntax:
ret (*name)(params)med obligatoriska parenteser. - Tilldela med funktionsnamnet (det omvandlas till en adress).
- Anropa med
fp(args)eller(*fp)(args). - Signaturen måste stämma;
typedefförbättrar läsbarheten.
Lär dig C med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 39
- Lektioner
- 144
Vanliga frågor
Är lektionen ”Deklarera funktionspekare” gratis?
Ja – hela texten till ”Deklarera funktionspekare” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i C Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i C Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Deklarera funktionspekare”?
Pekare till funktioner. Ni övar på C Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig C Academy?
Du behöver inga förkunskaper. Utbildningen i C Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.
Hur lång tid tar lektionen ”Deklarera funktionspekare”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här C Academy-lektionen?
Ja. Varje C Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Deklarera funktionspekare
- Skicka funktioner
- qsort med jämförelsefunktioner
- Tabeller med funktionspekare