Avatar billede hejhejhej Nybegynder
26. august 2005 - 11:55 Der er 4 kommentarer og
1 løsning

En funktions pointer i en struct

Hvis jeg har lavet en struct som indeholder en pointer til en funktion, fx
struct myStruct {
    int (*minFunktion)(int) ;
    int alder;                                       
};

hvordan tilgår jeg så funktionspointeren i denne struct. Fx når jeg skal initialisere en myStruct, så skriver jeg fx myStruct.alder = 19, men hvordan kan jeg tilgå funktionspointeren, så den kan sættes af lig med en tilfældig funktion som returnerer int og som tager en int som eneste argument ?
Avatar billede arne_v Ekspert
26. august 2005 - 12:12 #1
jeg lavede engang det her eksempel til at illustrere OOP i C - som side effekt viser
det function pointers i structs:

#include <stdio.h>

struct A
{
  int va;
  void (*f1)(struct A *a);
};

struct B
{
  int va;
  void (*f1)(struct A *a);
  int vb;
};

void constructorA(struct A *a)
{
    a->va = 123;
    a->f1 = NULL;
}

void f1B(struct A *a);

void constructorB(struct B *b)
{
    constructorA((struct A *)b);
    b->f1 = f1B;
    b->vb = 456;
}

void f1B(struct A *a)
{
    printf("%d\n",a->va);
}

void f2(struct B *b)
{
    printf("%d\n",b->vb);
}

int main()
{
    struct B *b = (struct B *)malloc(sizeof(struct B));
    constructorB(b);
    b->f1((struct A *)b);
    f2(b);
    free(b);
    return 0;
}
Avatar billede hejhejhej Nybegynder
11. september 2005 - 09:51 #2
Undskyld jeg først vender tilnbage nu. Havde helt glemt at acceptere. Gider du skrive et svar
Avatar billede arne_v Ekspert
11. september 2005 - 10:05 #3
gerne
Avatar billede arne_v Ekspert
29. september 2005 - 20:44 #4
så mangler du bare at acceptere svaret
Avatar billede hejhejhej Nybegynder
01. november 2005 - 10:55 #5
ups
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