Pointer auf Funktionen
-
Hallo Forum und alle Pointerliebhaber:
Wenn ich einen Pointer auf eine Funktion bilde ergibt
sich folgende Frage:Wieso kann hier der Adress-Operator entfallen?
z.B.
int (*pFunc) (float);int func_berechne (float);
pFunc = func_berechne;
Für Eure geschätzte Hilfe danke
-
soweit ich weiß:
weil du die klammern weglässt...
also nicht
func();
sondern nur
func;
wobei das dann die adresse auf die funktion bezeichnet.
hoffe das stimmt und hilft
cu Errraddicator
-
Weil die Funktion selbst doch nur eine Adresse für einen Programmabschnitt ist. Es gibt ja keine "Instanz von Funktionen".
-
Jedenfalls liefert
pFunc = func_berechne
dasselbe wie
pFunc = &func_berechne.
CU
Zero_Clamping
-
Heute habe ich gelesen, das der &-Operator nur bei Variablen und Felder
angewendet werden kann. Damit hat sich die Frage geklärt!
-
Jedenfalls liefert
pFunc = func_berechne
dasselbe wie
pFunc = &func_berechne.
was nichts daran ändert, dass das erste nicht unbedingt standardconform sit(der gcc nimmts nur mit &)
-
Doch, es ist Standardkonform. Ich hab keine Lust den entsprechenden Paragraphen rauszusuchen, aber eine Funktion zerfällt genauso wie ein Array bei jeder sich bietenden Gelegenheit in einen Pointer. Wo ein & gesetzt werden muss ist bei Memberfunktionen:
void (Foo::* ptr)() = &Foo::bar;
-
Hi!
Es ist (laut Struppi) sowohl mit als auch ohne '&' Standardkonform. Der gcc müsste das auch können, bei meinem Dozenten hat es auch funktioniert in C89.
Code-Hacker
-
Cocaine schrieb:
Weil die Funktion selbst doch nur eine Adresse für einen Programmabschnitt ist. Es gibt ja keine "Instanz von Funktionen".
ja, der funktionsname ist keine variable. ist mit arrays auch so.
beispiel:char *a = "hallo"; // a ist eine variable, & geht char b[100]; // b gibts nur als adresse, & geht nicht printf ("%p %p\n", a, &a); printf ("%p %p\n", b, &b);