Hallo Ralf, * Ralf Corsepius schrieb am 04.Aug.2002:
Am Sam, 2002-08-03 um 22.56 schrieb Bernd Brodesser:
Ein String ist immer ein Zeiger auf ein Byte, bei jeder Programmierpsrache.
Kommt darauf an, wie Du das meinst. Man kann String auch als abstraktes Konzept oder als Datentyp zur Verarbeitung von textuellen Zeichenketten auffassen.
Es ist nur manchmal gut vor dem Anwender versteckt, aber wie soll man sonst ein String definieren, wenn nicht als Zeiger? S.o.
Viele Programmiersprachen kennen derartige Datentypen, deren Details ein Programmierer nicht kennen soll/darf/muss.
Ja. Aber intern wird immer ein Zeiger auf eine Speicherstelle abgespeichert. Vielleicht zusätzlich noch die Länge. Auch C kennt Datentypen, deren Details ein Programmierer nicht kennen muss. float bzw. double wird in Mantisse und Exponent aufgeteilt. Wie genau das vonstatten geht, interessiert den Anwender nicht.
Pascal/Modula Strings z.B. führen Längenfelder mit sich und entsprechen inetwa folgendem C-Struct
struct String { size_t len ; char *char_array; }
Auch das C++ string<T>-Template arbeitet nach ähnlichen Muster.
Vorteil: Anders als in C braucht man sich nicht um terminierende \0-en zu kümmern: Nachteil: In der Regel deutlich höherer Verwaltungsoverhead, spürbare Geschwindigkeitseinbussen und Probleme bei Low-Level IO (Fehlt in der Pascal-Sprachdefinition völlig).
Eben. Bernd -- ROTFL = Rolling On The Floor, Laughing = Auf dem Boden wälzen, lachend. SCNR = Sorry, Could Not Resist = Sorry, Ich konte nicht wiederstehen. AFAIK = As Far As I Know = So weit ich weis|BTW = By The Way = Nebenbei bemerkt IMHO = In My Humble Opinion = meiner bescheidenen Meinung nach |Zufallssig. 9