Um dynamisch anzulegen: Die 100 müssen nicht ernst sein, nur als Debughilfe (Debugger in Visual Studio 6.0 & co zeigt die ersten 100 Elemente an). Um den richtigen Speicherplatz zu reservieren, gibt es noch ein paar passende Makros sizeof_Type usw. Die Anzahl der Elemente steht ja im head. |
Um dynamisch anzulegen: Die 100 müssen nicht ernst sein, nur als Debughilfe (Debugger in Visual Studio 6.0 & co zeigt die ersten 100 Elemente an). Um den richtigen Speicherplatz zu reservieren, gibt es noch ein paar passende Makros sizeof_Type usw. Die Anzahl der Elemente steht ja im head. Puritanisch sähe die richtige Definition so aus: |
Damit kann mit nur einem Zeiger auf diese Struktur ein verarbeitendes Programm alle Informationen lesen. Das Prinzip ist etwas aus Java abgeguckt, dort wird definiert |
typedef struct MyArray { Object_Array_Base_c head; Elementtype data[1]; } weil garantiert (sollte sein) mindestens nur 1 Element da ist, aber dann sieht man nichts mehr im Debugger. Wenn man in der obigen Form zum Bsp nur 12 Elemente reserviert, findet man ab data[12] falsche Daten, aber der direkte Zugriff ohne Indexprüfung wäre zur laufzeit auch mit data* nicht gesichert und beim Debuggen sollte man wissen, was man anschaut. Das zu diesem Nebenthema. Mit diesem Prinzip kann mit nur einem Zeiger auf diese Struktur ein verarbeitendes Programm alle Informationen lesen. Das Prinzip ist etwas aus Java abgeguckt, dort wird definiert |
KategorieCee |
KategorieC KategorieCee |
Das ZeigerAufAusreichendPlatzAlsCeeIdiom:
|
das den Programmierer - wie in diesem Beispiel - beissen kann.
Beispiele:
Sicherer scheint es, Funktionen zu verwenden, die dem ZeigerMitLängeAlsCeeIdiom folgen:
|
In obigem Fall ist dies fast unausweichlich, weil sich Zeilenlängen in Textfiles nicht sinnvoll unter Kontrolle halten lassen.
Vorteile des ZeigerMitLängeAlsCeeIdiom:
Nach langer Zeit ein Diskussionsbeitrag |
Ich meine,
typedef struct MyArray { Object_Array_Base_c head; Elementtype data[100]; }Um dynamisch anzulegen: Die 100 müssen nicht ernst sein, nur als Debughilfe (Debugger in Visual Studio 6.0 & co zeigt die ersten 100 Elemente an). Um den richtigen Speicherplatz zu reservieren, gibt es noch ein paar passende Makros sizeof_Type usw. Die Anzahl der Elemente steht ja im head. Puritanisch sähe die richtige Definition so aus:
typedef struct MyArray { Object_Array_Base_c head; Elementtype data[1]; }weil garantiert (sollte sein) mindestens nur 1 Element da ist, aber dann sieht man nichts mehr im Debugger. Wenn man in der obigen Form zum Bsp nur 12 Elemente reserviert, findet man ab data[12] falsche Daten, aber der direkte Zugriff ohne Indexprüfung wäre zur laufzeit auch mit data* nicht gesichert und beim Debuggen sollte man wissen, was man anschaut. Das zu diesem Nebenthema.
Mit diesem Prinzip kann mit nur einem Zeiger auf diese Struktur ein verarbeitendes Programm alle Informationen lesen. Das Prinzip ist etwas aus Java abgeguckt, dort wird definiert
Typ[] array = new Typ[gewuenschte_groesse];und die Größe ist über array.length jederzeit abfragbar. (Außerdem wird sie zur Laufzeit getestet). das Object_Array_Base ist sozusagen die Basis aller Array-Objekte. das war ein beitrag in Kürze, mfG HartmutSchorrig