Arbeiten mit Zeiger/Pointer
Arbeiten mit Zeiger/Pointer
Könnt ihr mir erklären, wie ich folgendes per Zeiger/Pointer erreichen kann:
Ich habe folgenden String:
„11 1333 22 44444 2339 3223 44444 777777 „
Der String sollte nachher so aussehen:
„11 1003 22 40004 20009 3003 40004 700007“
Wie kann man das mit Zeigern/Pointern erreichen?
Ich habe folgenden String:
„11 1333 22 44444 2339 3223 44444 777777 „
Der String sollte nachher so aussehen:
„11 1003 22 40004 20009 3003 40004 700007“
Wie kann man das mit Zeigern/Pointern erreichen?
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Re: Arbeiten mit Zeiger/Pointer
Wenn die Stringlänge sich änder garnicht. Wenn das im Beispiel nur ein versehen ist, dann so:
Code: Alles auswählen
Structure CharacterArray
c.c[0]
EndStructure
Procedure Umwanden(*Char.CharacterArray)
Protected I.i
While *Char\c[I]
Select *Char\c[I]
Case '0' To '9'
If (I <> 0 And *Char\c[I-1] <> ' ') And (*Char\c[I+1] <> ' ' And *Char\c[I+1] <> #NUL)
*Char\c[I] = '0'
EndIf
EndSelect
I + 1
Wend
EndProcedure
Define String.s = "11 1333 22 44444 2339 3223 44444 777777"
Debug String
Umwanden(@String)
Debug String
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: Arbeiten mit Zeiger/Pointer
Toll, jetzt muß ich das nur noch verstehen. 

PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Re: Arbeiten mit Zeiger/Pointer
Umwanden(@String) übergibgt die Adresse der Zeichenkette an die Prozedur.
Die Struktur CharacterArray, besteht aus einem Array von Zeichen (Characters).
Mit der Laufvariable I durchlaufe ich nun die Adresse der Zeichenkette und lese so Zeichen für Zeichen.
Mit I-1 oder I+1 kann ich halt auf Vorgägerzeichen oder nachfolgende Zeichen zugreifen.
Die Struktur CharacterArray, besteht aus einem Array von Zeichen (Characters).
Mit der Laufvariable I durchlaufe ich nun die Adresse der Zeichenkette und lese so Zeichen für Zeichen.
Mit I-1 oder I+1 kann ich halt auf Vorgägerzeichen oder nachfolgende Zeichen zugreifen.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: Arbeiten mit Zeiger/Pointer
Das ist ja nen toller Trick.STARGÅTE hat geschrieben:Code: Alles auswählen
Structure CharacterArray c.c[0] EndStructure *Char.CharacterArray

Ich staune immer wieder über so kleine Überraschungen.
c.c[0] passt sich also variabel an? Cool.
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.12 x64, OS: Win 11 24H2 x64, Desktopscaling: 150%, CPU: I7 12700 H, RAM: 32 GB, GPU: Intel(R) Iris(R) Xe Graphics | NVIDIA GeForce RTX 3070
Useralter in 2025: 57 Jahre.
PB 6.12 x64, OS: Win 11 24H2 x64, Desktopscaling: 150%, CPU: I7 12700 H, RAM: 32 GB, GPU: Intel(R) Iris(R) Xe Graphics | NVIDIA GeForce RTX 3070
Useralter in 2025: 57 Jahre.
Re: Arbeiten mit Zeiger/Pointer
Ist das Array begrenzt oder nur abhängig vom Arbeitsspeicher?
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Arbeiten mit Zeiger/Pointer
Der Speicher Deines Strings zeigt auf das Array, somit sollte die Grösse klar seindysti hat geschrieben:Ist das Array begrenzt oder nur abhängig vom Arbeitsspeicher?

Wobei der maximale Index des statischen Arrays einem Integer entspricht. Die Grösse
hängt allerdings auch vom Typ ab.
Code: Alles auswählen
Structure CharacterArray
c.c[0]
EndStructure
*p.CharacterArray = AllocateMemory(WasSystemHerGibt) ; Speicher zuordnen
*p\c[0 - MaxInteger] ; ansprechen per Index
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: Arbeiten mit Zeiger/Pointer
[0] ist absichtlich von PB zugelassen als "uneigentliches Array"
Bei [10] bekommst du ja vom Debugger n Error, wenn du auf [11] zugreifen willst.
Bei [0] darfst du dass.
Bei [10] bekommst du ja vom Debugger n Error, wenn du auf [11] zugreifen willst.
Bei [0] darfst du dass.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: Arbeiten mit Zeiger/Pointer
Danke für die Erklärungen. 
Kriegt man das im Laufe der Zeit einfach mal raus oder steht sowas in der Hilfe?

Kriegt man das im Laufe der Zeit einfach mal raus oder steht sowas in der Hilfe?
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.12 x64, OS: Win 11 24H2 x64, Desktopscaling: 150%, CPU: I7 12700 H, RAM: 32 GB, GPU: Intel(R) Iris(R) Xe Graphics | NVIDIA GeForce RTX 3070
Useralter in 2025: 57 Jahre.
PB 6.12 x64, OS: Win 11 24H2 x64, Desktopscaling: 150%, CPU: I7 12700 H, RAM: 32 GB, GPU: Intel(R) Iris(R) Xe Graphics | NVIDIA GeForce RTX 3070
Useralter in 2025: 57 Jahre.
Re: Arbeiten mit Zeiger/Pointer
Von mir auch DANKE.
Werde später sicherlich noch Fragen haben
Werde später sicherlich noch Fragen haben
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9