Annonceindlæg fra NetNordic
26. august 2008 - 22:35
#3
En pointer til en funktion er simpelthen adressen paa en funktion gemt i en variabel. Jeg har et lille eksempel fra lageret: #include <stdio.h> #include <stdlib.h> typedef void (*fptr)(); void f1() { printf("f1\n"); } void f2() { printf("f2\n"); } void f3() { printf("f3\n"); } void f4() { printf("f4\n"); } int main() { fptr f[] = { f1, f2, f3, f4 }; int i; srand(12345); for(i=0;i<10;i++) { f[rand() % 4](); } return 0; }
26. august 2008 - 22:37
#4
typedef void (*fptr)(); definerer fptr til en type af pointer til funktion som returnerer void og som ingen argumenter har. fptr f[] = { f1, f2, f3, f4 }; laver et array af fptr med 4 elementer som peger paa hver sin funktion f[rand() % 4](); kalder en tilfaeldig af funktionerne VIGTIGT: der er mange andre sammenhaenge hvor man bruger pointer til funktion dette var kun en af dem
26. august 2008 - 22:42
#5
Et andet eksempel denne gang C++ fra lageret er maaske mere relevant: #include <iostream> using namespace std; double f1(double x) { return x - 10; } double f2(double x) { return x * x - 25; } const double SMALL = 0.0000001; typedef double (*fptr)(double x); double solve(fptr f) { double xlast = 0; double x = 1; while(fabs(x-xlast)>SMALL) { xlast = x; x = x - f(x) / ((f(x+SMALL/2)-f(x-SMALL/2))/SMALL); } return x; } int main() { cout << "x - 10 = 0 => x = " << solve(f1) << endl; cout << "x * x - 25 = 0 => x = " << solve(f2) << endl; return 0; } [koden bruger Newtons metode til at finde nul punkter]