Ganz so wie Variablen Zahlen speichern, speichern Pointer Verweise auf Objekte. Pointer ermöglichen z.B. dass dieselbe Funktion dasselbe mit verschiedenen Objekten macht, je nachdem auf welches Objekt momentan durch einen bestimmten Pointer verwiesen wird. Pointer lassen sich also wie Synonyme oder Zweitnamen für Objekte verwenden. Wie bei den Variablen gibt es auch einige vordefinierte Pointer; der am häufigsten benutzte ist my. Um einen Pointer für ein Objekt zu definieren, fügen Sie einfach ein '*' an die Objektbezeichnung an:
ENTITY* name; // define an uninitialized entity pointer ENTITY* name = otherpointer; // define an initialized entity pointer
In der zweiten Zeile verweist der Pointer auf einen anderen Entity-Pointer, der vorher im Skript definiert wurde, eine Sicht z.B. oder eine Sky-Entity. In Funktionen lassen sich Pointer wie normale Objekte verwenden. Pointer können einander zugewiesen werden und lassen sich durch die if-Anweisung vergleichen, um zu prüfen, ob sie auf dasselbe Objekt verweisen. Beispiel:
ENTITY* ent1 = NULL; // initialize the pointer to zero ENTITY* ent2; ... ent1 = my; ent2 = ent1; ent2.alpha = 75; // access an entity parameter if (ent1 == ent2) { ptr_remove(ent2); } if (ent1 != NULL) { ptr_remove{ent1); }
Einige Pointer sind vordefiniert. Eine Liste dieser Pointer finden Sie in einem späteren Kapitel.
Die beiden wichtigsten vordefinierten Pointer sind my für die Entity, die die aktuelle Aktion ausgelöst hat und you für eine zweite Entity, die durch einige Engine-Funktionen gesetzt wird.
C-Skript unterstützt die folgenden Pointer: ENTITY*, STRING*, PANEL*, BMAP*, und MATERIAL*. Lite-C unterstützt Pointer für alle vordefinierten oder Anwender-definierten Variablen und Structs. Ob ein Objekt nun ein Pointer oder das tatsächliche Objekt ist, findet der Kompiler automatisch heraus. Daher müssen sich Anwender normalerweise also gar nicht um den Unterschied zu kümmern.
float myfunction(int a, float b); // define a function pointer named "myfunction" float fTest(int a, float b) { return (a*b); } ... myfunction = fTest; x = myfunction(y,z);In lite-C lassen sich zum Speichern von Arrays der Funktionspointer void*-Arrays verwenden. Beispiel:
float myfunction(int a, float b); // define a function pointer void* function_array[100]; // define a pointer array float fTest(int a, float b) { return (a*b); } ... function_array[n] = fTest; myfunction = function_array[n]; x = myfunction(y,z);