•  Back 
  •  Inhalt 
  •  Index 
  •  Tree View 
  •  Cross references 
  •  Hilfe 
  •  Show info about hypertext 
  •  View a new file 
Topic       : Online-Hilfe zu Omikron.Basic 5
Author      : Karsten Lüdersen @ HH
Version     : OM-Basic-Hilfe 0.60
Subject     : Programmieren/Basic
Nodes       : 1054
Index Size  : 29270
HCP-Version : 4
Compiled on : Atari
@charset    : atarist
@lang       : 
@default    : 
@help       : Hilfe
@options    : +g -i +y +z -t4 -d24
@width      : 75
View Ref-FileZeiger auf Funktionen                                        Omikron.Basic

Der Adreß-Operator "&" ermittelt die Adresse eines Objekts (Variable,
Feld oder Funktion). Der Ausdruck: "Ptr_Str_Cmp=&FN Cmp(A$, B$)"
speichert in der Variable "Ptr_Str_Cmp" einen Zeiger auf die Funktion
"FN Cmp(,)" (also deren Adresse) ab. Mit diesem Zeiger kann die Funktion
nun indirekt aufgerufen werden: "PRINT FN *Ptr_Str_Cmp("A","B")"
Solche Funktions-Zeiger können ebenso wie Zeiger auf ein Feld an
Prozeduren übergeben werden. Mit oberem Beispiel wäre eine
"Sortier-Prozedur" denkbar, die zum String-Vergleich lediglich einen
Funktionszeiger übergeben bekommt. Abhängig von der Vergleichsfunktion
wird nach ganz unterschiedlichen Kriterien sortiert (z.B. aufsteigend,
absteigend oder groß=klein ...)

Beispiel:
    Ptr=&FN Sin2#(X#)
    PRINT "Wertetabelle von Sinusquadrat:"
    Werte_Tab Ptr,0#,1#,.1#
    PRINT "Wertetabelle von Cosinusquadrat:"
    Werte_Tab &FN Cos2#(X#),0#,1#,.1#
    '
    A$= INPUT$(1)
    END
    '
    DEF FN Sin2#(X#)= SIN(X#)* SIN(X#)
    DEF FN Cos2#(X#)= COS(X#)* COS(X#)
    '
    DEF PROC Werte_Tab(Ptr_To_Df_Fn,Von#,Bis#,Schritt#)
       LOCAL X#=Von#
       '
    WHILE X#<=Bis#
       PRINT X#,FN *Ptr_To_Df_Fn#(X#)' Vorsicht:
       X#=X#+Schritt#'             hier kann compilert keine Typprüfung
       WEND'                       mehr durchgeführt werden
    RETURN

Wichtig: Wenn Sie auch den Compiler verwenden, achten Sie auf
genaue Übereinstimmung der Parameterlisten der über Zeiger aufgerufenen
Funktionen. Das Compilat kann zur Laufzeit keine Typanpassung
vornehmen, da nicht bekannt ist auf welche Funktion der Zeiger gerade
verweist. Im oberen Beispiel dürfen Sie "FN *Ptr_To_Df_Fn" nur mit einem
Double-Float als Parameter aufrufen (hier X#). Die normalerweise
notwendige Konvertierung von integer nach double-float kann nicht
automatisch erfolgen, der Integer-Parameter wird falsch übergeben.