Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Mit Zeiger durch String?
sashs - So 01.04.12 13:42
Titel: Mit Zeiger durch String?
Hallo,
ist es bei Delphi möglich einfach mit einem Character-Pointer durch einen String zu navigieren?
Gruß
Sascha
Moderiert von
Narses: Topic aus Sonstiges (Delphi) verschoben am So 01.04.2012 um 14:41
bummi - So 01.04.12 14:57
Du meinst z.B. s[x] := 'A' ??
Gausi - So 01.04.12 15:02
Ich glaube, er meint sowas:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| var s: string; p: PChar; s := 'Hallo Welt'; p := PChar(s);
ShowMessage(p); p := p + 6; ShowMessage(p); |
Ja, das geht. ;-)
sashs - So 01.04.12 16:39
Ich hab noch ganz nachgeschaut, aber das von Gausi scheint das zu sein was ich brauche.
Ich wollte eigentlich noch dazu schreiben, dass ich es so meine, wie in c/c++.
Danke.
Gruß
Sascha
Martok - So 01.04.12 20:33
Es geht, aber du verzichtest auf alle Sicherungsnetze die Delphiprogramme so robust machen.
Wenn du also keine zwingenden Geschwindigkeitsgründe hast, bietet sich der Zugriff per S[index] (siehe
bummi) eher an.
Nur so als Anmerkung.
sashs - Fr 06.04.12 12:39
Wenn ich auf die Stelle zugreifen möchte, mache ich das ja wie bummi gesagt hat.
Es ist aber wichtig für mich, dass ich durch den String durchlaufen kann. Also ich arbeite den String von vorne nach hinten durch und das was schon abgearbeitet ist brauche ich nicht mehr.
Deshalb wollte ich gerne mit einem Zeiger durchlaufen, weil dieser dann nur noch den unbearbeiteten String hält.
Ok, ich hätte es auch komplett mit bummis Methode machen können. Aber mit dem Zeiger find ich persönlich es schöner.
Gruß
Sascha
Kha - Fr 06.04.12 14:44
sashs hat folgendes geschrieben : |
| Deshalb wollte ich gerne mit einem Zeiger durchlaufen, weil dieser dann nur noch den unbearbeiteten String hält. |
...was nur bei einfach verketteten Listen mit Garbage Collection funktioniert. Also sicher nicht in Delphi, da bräuchte man schon Haskell ;) .
jaenicke - Fr 06.04.12 15:38
Kha hat folgendes geschrieben : |
sashs hat folgendes geschrieben : | | Deshalb wollte ich gerne mit einem Zeiger durchlaufen, weil dieser dann nur noch den unbearbeiteten String hält. | ...was nur bei einfach verketteten Listen mit Garbage Collection funktioniert. Also sicher nicht in Delphi, da bräuchte man schon Haskell ;) . |
Wie meinst du das? Natürlich geht das in Delphi. :nixweiss:
Das kannst du auch leicht testen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| function Test(const a: string): string; var b: PChar; begin Result := ''; b := PChar(a); while b^ <> #0 do begin Result := Result + b^; ShowMessage(IntToStr(b - @a[1])); ShowMessage(b); Inc(b); end; end; |
Ausgegeben wird die Differenz in Chars der Adresse des aktuellen Zeigers auf das aktuelle Zeichen und der Adresse des ersten Zeichens des Strings. Dementsprechend wird ausgegeben 0, 1, 2, ... usw. ;-)
Zudem wird jeweils der verbleibende String in b ausgeben.
Kha - Fr 06.04.12 18:30
jaenicke hat folgendes geschrieben : |
| Wie meinst du das? |
Ich habe "das was schon abgearbeitet ist brauche ich nicht mehr" und "hält nur noch den unbearbeiteten String" im Sinn von Speichermanagement verstanden, aber vielleicht war es auch anders gemeint.
sashs - Fr 06.04.12 19:52
Hallo,
Kha hat folgendes geschrieben : |
jaenicke hat folgendes geschrieben : | | Wie meinst du das? | Ich habe "das was schon abgearbeitet ist brauche ich nicht mehr" und "hält nur noch den unbearbeiteten String" im Sinn von Speichermanagement verstanden, aber vielleicht war es auch anders gemeint. |
Ich habe mich vielleicht missverständlich ausgedrückt. Es ging mir nicht direkt um den Speicher, sondern um den "Inhalt" der Variablen.
Gruß
Sascha
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!