Funktio-osoittimien määrittely
Osoittimet funktioihin.
Funktio-osoittimien määrittely on ilmainen C Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu C Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. C Academy-kurssilla on yhteensä 4 oppituntia.
Funktioilla on osoitteet
Kuten data, jokainen funktio sijaitsee muistissa tietyssä osoitteessa. Funktio-osoitin tallentaa tämän osoitteen, joten funktion voi kutsua epäsuorasti.
#include <stdio.h>
void greet(void) { printf("hello\n"); }
int main(void) {
void (*fp)(void) = greet;
fp();
return 0;
}Määrityksen lukeminen
Määritys int (*fp)(int) tarkoittaa, että fp on osoitin funktioon, joka ottaa parametriksi int-arvon ja palauttaa int-arvon.
*fp:n ympärillä olevat sulkeet ovat pakolliset.
#include <stdio.h>
int square(int x) { return x * x; }
int main(void) {
int (*fp)(int) = square;
printf("%d\n", fp(5));
return 0;
}Funktion sijoittaminen
Funktion nimi muuttuu automaattisesti sen osoitteeksi, joten fp = square ja fp = &square vastaavat toisiaan.
#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;
}Kutsuminen osoittimen kautta
Funktio-osoittimen kautta voi kutsua funktiota muodossa fp(args) tai eksplisiittisesti muodossa (*fp)(args). Molemmat toimivat samalla tavalla.
#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;
}Allekirjoitusten on täsmättävä
Funktio-osoittimen tyyppiin kuuluvat paluuarvon tyyppi ja parametrien tyypit. Sille voi sijoittaa vain funktion, jonka allekirjoitus täsmää täsmälleen.
#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;
}Uudelleenosoittaminen ajon aikana
Funktio-osoitin on muuttuja, joten sen voi ohjelman suorituksen aikana kohdistaa eri funktioihin.
#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;
}Valitseminen ehdon perusteella
Valitkaa kutsuttava funktio ajonaikaisen arvon perusteella ja kutsukaa sitä yhden osoittimen kautta.
#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 selkeyttää lukemista
Funktio-osoittimen syntaksi on pitkä. typedef antaa tyypille nimen ja tekee määrityksistä selkeämpiä.
#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;
}Kahden parametrin funktiot
Funktio-osoittimilla voi kuvata minkä tahansa allekirjoituksen. Tässä on osoitin kahden kokonaisluvun operaatiolle.
#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;
}NULL-funktio-osoitin
Kuten dataosoitin, myös funktio-osoitin voi olla NULL. Tarkistakaa aina ennen kutsua, ettei mahdollisesti asettamatta jäänyt osoitin ole tyhjä.
#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;
}Osoitteen tulostaminen
Tallennetun osoitteen voi tarkistaa. Eri funktioilla on eri osoitteet.
#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;
}Pikatesti
Testatkaa ymmärrystänne funktio-osoittimien määrityksistä.
Kertaus
Opitte määrittämään ja käyttämään funktio-osoittimia:
- Syntaksi:
ret (*name)(params), jossa sulkeet ovat pakolliset. - Sijoittakaa osoittimeen funktion nimi, joka muuttuu automaattisesti osoitteeksi.
- Kutsukaa muodossa
fp(args)tai(*fp)(args). - Allekirjoituksen on täsmättävä;
typedefparantaa luettavuutta.
Opi C tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 39
- Oppitunnit
- 144
Usein kysytyt kysymykset
Onko oppitunti ”Funktio-osoittimien määrittely” ilmainen?
Kyllä – oppitunnin ”Funktio-osoittimien määrittely” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko C Academy-kurssin, päivitä CoddyKit PROhon. C Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Funktio-osoittimien määrittely”?
Osoittimet funktioihin. Harjoittelet C Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni C Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin C Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.
Kuinka kauan ”Funktio-osoittimien määrittely”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä C Academy-oppitunnilla?
Kyllä. Jokainen C Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Funktio-osoittimien määrittely
- Funktioiden välittäminen
- qsort vertailufunktioilla
- Funktio-osoitintaulukot