5d. Pointers naar functies
2021-02-19
slides.com/jod/pt_5d
Docent: Jo Devriendt
Assistent: Ann Philips
Coördinator: Joost Vennekens
voornaam.achternaam@kuleuven.be
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Terminologie:
subroutine, functie, procedure
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
- Subroutine: stuk code dat je kunt oproepen via een naam
- Functie: subroutine die waarde teruggeeft
- Procedure: subroutine die geen waarde teruggeeft
- Sommige mensen gebruiken alles door elkaar (*kuch*)
- deze presentatie en hst 5.8 gaan eigenlijk over pointers naar subroutines (dus zowel procedures als functies)
Functies hebben adres
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
lagere adressen
hogere adressen
instructies in de executable
heap
↓
...
↑
stack
statische data
command line argumenten
Daar ergens...
Pointers naar functies
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
#include <stdio.h>
#define PI 3.14159
double omtrek(double r) {
return 2*PI*r;
}
double oppervlak(double r) {
return PI*r*r;
}
void main() {
double straal = 10;
double (*fptr)(double);
fptr=omtrek;
printf("Omtrek: %lf\n",
fptr(straal));
fptr=oppervlak;
printf("Oppervlak: %lf\n",
fptr(straal));
}Toekenning: naam van bestaande functie met gepast prototype
Declaratie:
output type
(*naam)
(types argumenten)
Oproep: zoals elke functie
Gedraagt zich zoals andere variabelen
Haakjes zijn belangrijk
Nut van functiepointers?
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
- Functies kunnen nuttige data-elementen zijn, die opgeslagen en doorgegeven moeten worden
- Asynchroon programmeren met callbacks (cfr. Javascript)
-
Functioneel programmeren
- bvb. map, filter in Python
#include <stdio.h>
#define N 5
void sorteer(int a[], int n, int (*cmp)(int, int)) {
// ...
}
int kleinerDan(int x, int y) {
return x<y;
}
int delerVan(int x, int y) {
return x%y==0;
}
void main() {
int a[N] = {6,5,4,3,2};
// ...
sorteer(a,N,delerVan);
// ...
sorteer(a,N,kleinerDan);
}Samenvatting
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
- Het kan handig zijn om functies als data te behandelen
- Een functiepointer is een variabele die naar het adres van een functie wijst
- Kan aangepast, meegegeven als argument, en opgeroepen worden
5d. Pointers naar functies
By Jo Devriendt
5d. Pointers naar functies
- 308