Avatar billede danielhep Nybegynder
19. februar 2003 - 09:22 Der er 12 kommentarer og
2 løsninger

Pointer spm c++

Hej

Jeg hørte engang noget med at en pointer kan pointe til en funktion...
Hvis det er rigtigt, skal det så være en int, char eller måske long...??

mvh

Daniel
Avatar billede arne_v Ekspert
19. februar 2003 - 09:25 #1
Det skal være en pointer til function !

:-)
Avatar billede arne_v Ekspert
19. februar 2003 - 09:26 #2
Se f.eks. erklæringen af qsort i stdlib.h:

void qsort (void *base, size_t nmemb, size_t size, int (*compar) (const void *, const void *));

4 argumenter:
  - pointer til data
  - antal elementer
  - størrelsen af elementer
  - pointer til funktion som tager to argumenter der begge er pointere
Avatar billede arne_v Ekspert
19. februar 2003 - 09:30 #3
Eksempel:

#include <iostream>

using namespace std;

void f1()
{
  cout << "1" << endl;
  return;
}

void f2()
{
  cout << "2" << endl;
  return;
}

int main()
{
  void (*f)();
  f = f1;
  f();
  f = f2;
  f();
}
Avatar billede danielhep Nybegynder
19. februar 2003 - 09:33 #4
Arne>>

Jeg er ikke helt med på den, jeg kan godt se hvad du mener, men hvordan skal man så bruge den der pointer til function i prak. hvis man skulle kode det??
Avatar billede arne_v Ekspert
19. februar 2003 - 09:34 #5
Et meget simpelt eksempel !
Avatar billede danielhep Nybegynder
19. februar 2003 - 09:37 #6
Siger at du:

Opretter en pointer som hedder f som er af type void, og som kan pointe på funktioner pga "();" i enden, og så kan man indsætte ord i f som så er funktions navne.
Men skal man ikke indramme f2 med "" eller er det ligemeget ?
Avatar billede arne_v Ekspert
19. februar 2003 - 09:38 #7
qsort er et godt eksempel på raktisk brug.

Den kan sortere arrays af brugerdefinerede structs.

Den får size af structen over så den kan swappe elementer med memcpy.

Men hvordan kan den sammenligne structs som den ikke kender ?

Jo man sender en funktion med over som argument - en funktion der
kender de structs der skal sammenligned !
Avatar billede soreno Praktikant
19. februar 2003 - 09:41 #8
Du kan med fordel kigge lidt her:
http://www.function-pointer.org/
Avatar billede arne_v Ekspert
19. februar 2003 - 09:51 #9
Et eksempel med qsort:

#include <stdlib.h>

#include <iostream>

using namespace std;

struct mys {
  int a;
  int b;
};

int sorta(const void *s1,const void *s2)
{
  return (((mys *)s1)->a - ((mys *)s2)->a);
}

int sortb(const void *s1,const void *s2)
{
  return (((mys *)s1)->b - ((mys *)s2)->b);
}

int main()
{
  struct mys x[3];
  x[0].a=1;
  x[0].b=3;
  x[1].a=2;
  x[1].b=2;
  x[2].a=3;
  x[2].b=1;
  qsort(x,3,sizeof(mys),sorta);
  for(int i=0;i<3;i++) cout << x[i].a << " " << x[i].b << endl;
  qsort(x,3,sizeof(mys),sortb);
  for(int i=0;i<3;i++) cout << x[i].a << " " << x[i].b << endl;
}
Avatar billede soreno Praktikant
19. februar 2003 - 10:17 #10
Dette er et eksempel på c++ med brug af stl:

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

class ErVokal
{
    public:
        bool operator() (char ch)
        {
            ch = tolower(ch);
            return (ch == 'a' || ch == 'e' || ch == 'i' ||
                    ch == 'o' || ch == 'u' || ch == 'y' ||
                    ch == 'æ' || ch == 'ø' || ch == 'å');
        }
};

int main(int argc, char **argv)
{
    string tekster[] = {"Dette er en tekst i et array",
                        "med i alt 3 elementer",
                        "hvori der er en masse vokaler"};
   
    for(int i=0;i<3;++i)
    {
        int n;
        n = count_if(tekster[i].begin(), tekster[i].end(), ErVokal());
        cout << "[" << tekster[i] << "] " << n << " vokaler" << endl;
    }
   
    return 0;
}

Output er:
[Dette er en tekst i et array] 10 vokaler
[med i alt 3 elementer] 7 vokaler
[hvori der er en masse vokaler] 10 vokaler
Avatar billede danielhep Nybegynder
19. februar 2003 - 10:45 #11
Arne>>

Hvis jeg nu laver en funktion sådan her, er det noget galt i det, eller skal jeg indramme (int*) sådan her ?

int* beregn(char *txt)
{
char *a;
return a;
}
Avatar billede arne_v Ekspert
19. februar 2003 - 10:49 #12
Jeg er ikke helt med.

Hvordan kommer pointer to function ind i billedet ?
Avatar billede arne_v Ekspert
19. februar 2003 - 10:50 #13
Iøvrigt er den erklæret til at returnere en pointer to int men
returnerer en pointer to char (og den er heller ikke initilaisereret
i dette kode fragment).
Avatar billede danielhep Nybegynder
19. februar 2003 - 10:54 #14
Arne>>

Det er fordi at jeg sidder og kosker lidt lige nu, så jeg skulle bare lige have noget på plads...Ja, der kom en lille fejl med da jeg skrev lige før, men sådan er det jo bare, det skulle have været en int type...

Arne endnu engang har du fået mig til at fatte det.. :)

tak for hjælpen

Mvh

Daniel
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