|
Hauptseite - Welches System? - Hardware - Software - Emulatoren - |
Internet MausNet Programmieren Verweise Über |
Es ist möglich, Zeiger auf jeden Datentyp zu deklarieren. Also auch auf einen Zeiger, was vielleicht auf den ersten Blick etwas verwirrend ist. Notwendig ist dies aber z.B. schon beim Zugriff auf den Cookie Jar. Hier existiert eine Systemvariable, die den Zeiger auf den Cookie Jar enthält. Von dieser Systemvariable ist die Adresse bekannt. Wenn wir dafür eine Variable anlegen wolle, benötigen wir einen Zeiger, der auf einen Zeiger zeigt, der auf den Cookie Jar zeigt. Genau das macht das folgende Beispiel. Was die ersten Zeilen mit dem Lattenkreuz bzw. Hash nun genau bedeuten, wird im Kapitel über den Preprozessor erklärt. Sie dienen dazu, das Programm an Unterschiede zwischen den verschiedenen Compilern anzupassen. Der Zugriff auf das Betriebssystem gehört nicht zu den genormten Teilen eines ANSI Compilers.
#ifdef __TURBOC__ #include <tos.h> #else #ifdef __GNUC__ #include <osbind.h> #else #include <tosbind.h> #endif #endif typedef struct cookie_entry { union { unsigned long name_long; char name_array[4]; } name; unsigned long value; } CookieEntry; int main(void) { CookieEntry **CookieJarPtr, *CookieJar; long OldStack; OldStack=Super(0L); CookieJarPtr = (CookieEntry**)0x5a0L; CookieJar=*CookieJarPtr; Super((void *)OldStack); return 0; }
Um auf die Systemvariable zuzugreifen, wurde eine Zeiger CookieJarPtr angelegt, der auf die Adresse 0x5a0 gesetzt wird, wo der Zeiger auf den Cookie Jar steht. Anschließend wird diese Adresse ausgelesen, also der aud den Wert zugegriffen, auf den der Pointer zeigt, um den Zeiger auf den Cookie Jar zu erhalten. Da auf diese Systemvariable nur im Supervisormodus zugegriffen werden kann, sind die beiden Anweisungen in die Aufrufe der Betriebssystemfunktion Super geklammert. Eine Beschreibung dieser Funktionen ist allerdings nicht Bestandteil dieses Kurses.
Die Zeiger kann man natürlich auch grafisch darstellen:
+------------+ +----------+ +-----++-----+ |CookieJarPtr|---->|_p_cookies|---->| || | +------------+ +----------+ |name ||name | 0x5a0 | || | +---------+ |value||value| |CookieJar|---->| || | +---------+ +-----++-----+ Cookie
Der Zeiger CookieJarPtr wird auf eine Adresse gesetzt, die einen Zeiger auf den Cookie Jar enthält. Dies ist die Systemvariable _p_cookies. Der Zeiger CookieJar wird auf den gleichen Wert gesetzt und beide zeigen nun auf den ersten Cookie. In dem Cookie Jar stehen die Cookies direkt hintereinander. Der Cookie Jar ist also ein Feld bzw. array. Allerdings ist seine Größe nicht vorgegeben.
English version not yet available. |