Das ist wie der Unterschid bei
Delphi-Quellcode:
var
S:
string;
P: Pointer;
P := @S[1];
P := @S[Low(
string)];
// weil im Mobilen waren die Strings mal 0-basiert, also S[0] war das erste Zeichen wenn für iOS kompiliert
P := @S;
// Zeiger auf die Variable, nicht auf den String
P := PChar(S);
// Zeiger auf den String (erstes Zeichen), aber wenn '', dann Ersatzweise ein Zeiger auf die Konstante EmptyString mit #0#0
P := Pointer(S);
// bei '' ist das hier NIL (wichtig, wenn man z.B. mit Leerstrings in der WinAPI arbeitet)
Oder String-Resourcen.
In dem PChar werden "Werte" bis #$0000FFFF als Index für die
PE-Ressourcen benutzt, und darüber sind es Zeiger auf Strings.
Ich kenn Leute, die schreiben auch
S := EmptyString;
anstatt
S := '';
, was per se nicht falsch ist, aber
ich hatte mal mit EmptyString eine böse Erfahrung.
Und auch wenn der "Code" so selbstsprechend ist, empfinde ich "Namen" als Konstante/Variable auf "etwas" und nicht als "Nichts" ... kann so den Code schlechter lesen.
Durch einen schiefen Pointer wurde dort etwas in EmptyString reingeschrieben, denn "typisierte String-Konstanten" sind in Wirklichkeit "schreibgeschützte Variablen", aber sie lassen sich dennoch beschreiben.
Mit dem Ergebnis, dass wir eine halbe Woche danach suchten, warum alle DevExpress-Grids im Programm in "leeren" Zellen plötzlich "etwas" anzeigten, denn sie nutzen auch EmptyString zu Initialisierung.