Der Vorteil an Pointern ist, dass man schneller auf dem String arbeiten kann, z.B. parsen oder ähnliches. Der Nachteil an Pointern ist, dass jede Änderung im String ihn auch nach außen hin ändert.
Allerdings können so auch allerhand lustige Dinge geschehen wie zum Beispiel das hier:
Code: Alles auswählen
Procedure shiftRight(*text.Character)
Protected *c.Character = *text + SizeOf(Character)
Protected temp.c = *text\c
While *c\c
Swap temp, *c\c
*c + SizeOf(Character)
Wend
*text\c = temp
EndProcedure
Debug "Hallo"
shiftRight(@"Hallo")
Debug "Hallo"
shiftRight(@"Hallo")
Debug "Hallo"
shiftRight(@"Hallo")
Debug "Hallo"
shiftRight(@"Hallo")
Debug "Hallo"
shiftRight(@"Hallo")
Debug "Hallo"
Wie man sieht steht da mehrmals ein 'Debug "Hallo"'. Dennoch wird jedes mal etwas anderes ausgegeben. Wenn ein konstanter String wie "Hallo" mehrmals in einem PureBasic-Quellcode vorkommt, dann wird er trotzdem nur einmal im ASM-Code gespeichert, und zwar einfach nur aus platzsparenden Gründen. Wenn man dieses String jetzt aber per Pointer manipuliert, ändert er sich automatisch überall.
Also immer dran denken. Bei Pointern ist Vorsicht geboten.