Avatar billede danielhep Nybegynder
24. februar 2003 - 08:34 Der er 3 kommentarer og
2 løsninger

Pointer to Function as a arc

#include <stdio.h>

void func1(void(*p)(void));

void one(void);
void two(void);
void other(void);

main()
{
/*return navn input*/
  void(*ptr)(void);  //pointer to a function
  int a;

  for(;;)
  {
    puts("\nEnter an inter between 1 and 10, 0 to exit: ");
    scanf("%d",&a);

    if(a==0)
      break;
    else if(a==1)
      ptr=one;
    else if(a==2)
      ptr=two;
    else
      ptr=other;

    func1(ptr);
  }
return 0;
}


void func1(void(*p)(void))
{
  p();
}

void one(void)
{
  puts("\nYou entered one");
}
void two(void)
{
  puts("\nYou entered two");
}
void other(void)
{
  puts("\nYou did not enter 1 or 2 jurk!!");
}


Jeg har et par spørgsmål.....Hvis vi kigger på func1, som er den function som har en pointer til en funktion.  Jeg kan ikke rigtigt se hvad man kan bruge dette argument til i func1.

Hvis man har en function med pointer til en func. hvad har man så af muligheder for at bruge dette argument til noget fornuftigt, og hvad for nogle muligheder har man med det ?+

Mvh

Daniel
Avatar billede jpk Nybegynder
24. februar 2003 - 08:48 #1
if-sætningen i main sætter pointeren til at pege på den funktioneder ønskes udført, fx ptr=one;

func1 udfører selve funktionen idét den får p som argument og kalder p();

Nu fremgår det ikke særlig godt, fordi dette er et simpelt eksempel...
Fordelen ved, at func1 her har en pointer til en funktion er, at den kan udføre funktionen men den behøver ikke vide noget som helst om den!
Altså den behøver ikke kende funktionens navn...
Avatar billede arne_v Ekspert
24. februar 2003 - 09:30 #2
Du kan lave en meget generel funktion som kan udføre forskellige
ting ved at man smider forskellige specifikke funktioner over
som argument.

qsort er et klassisk eksempel på en sådan funktion.

Teknikken minder lidt om den man bruger i OOP med en basis klasse
som har en abstrakt metode - der implementeres forskelligt i
sub-klasserne.
Avatar billede danielhep Nybegynder
24. februar 2003 - 09:52 #3
Ja, men jeg har bare meget svært ved at se hvornår jeg skal bruge det, og hvorfor det er så sejt ... ?

Mvh

Daniel
Avatar billede jpk Nybegynder
24. februar 2003 - 09:55 #4
Det er det heller ikke hvis du koder objektorienteret..!
(med enkelte undtagelser)
Avatar billede arne_v Ekspert
24. februar 2003 - 09:59 #5
Det er meget smart i C til at generalisere noget kode med.

I C++ er der ofte andre måder. At disse måder så ofte bruger
en functtion pointer "behind the scene" er en helt anden sag.
En metode der er erklæret virtual er i virkeligheden en function
pointer.
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