Avatar billede lifehacker Nybegynder
26. august 2008 - 22:04 Der er 6 kommentarer og
1 løsning

Pointere og Funktioner

Nogen som kan gennemgå de væsentligste aspekter af anvendelse af pointere i forbindelse med funktioner?
Avatar billede arne_v Ekspert
26. august 2008 - 22:15 #1
Brug af almindelige pointere i funktioner eller brug af pointere til funktioner ?
Avatar billede lifehacker Nybegynder
26. august 2008 - 22:20 #2
brug af pointere til funktioner.
Avatar billede arne_v Ekspert
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;
}
Avatar billede arne_v Ekspert
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
Avatar billede arne_v Ekspert
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]
Avatar billede lifehacker Nybegynder
26. august 2008 - 23:30 #6
1ooo mange tak Arne!! :-)
Sidste eksempel kan jeg bedst forstå!
Avatar billede arne_v Ekspert
27. august 2008 - 02:29 #7
så smider jeg et svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester