Pointer

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.

Funktioms-Pointer

Funktions- oder Aktions-Pointer lassen sich unter C-Skript als FUNCTION* definieren.  LC  Unter lite-C wird ein Funktionspointer genauso wie ein Funktionsprototyp mit Rückgabe- und Parameter-types definiert.
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);

Siehe auch:

Pointers, Structs, Functions

 

 

► Aktuelle Version Online