Arbeiten mit Zeiger/Pointer

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Arbeiten mit Zeiger/Pointer

Beitrag von dysti »

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?
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Arbeiten mit Zeiger/Pointer

Beitrag von STARGÅTE »

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
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Re: Arbeiten mit Zeiger/Pointer

Beitrag von dysti »

Toll, jetzt muß ich das nur noch verstehen. :bounce:
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Arbeiten mit Zeiger/Pointer

Beitrag von STARGÅTE »

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.
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
Benutzeravatar
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Re: Arbeiten mit Zeiger/Pointer

Beitrag von Kurzer »

STARGÅTE hat geschrieben:

Code: Alles auswählen

Structure CharacterArray
	c.c[0]
EndStructure

*Char.CharacterArray
Das ist ja nen toller Trick. :shock:
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.
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Re: Arbeiten mit Zeiger/Pointer

Beitrag von dysti »

Ist das Array begrenzt oder nur abhängig vom Arbeitsspeicher?
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Benutzeravatar
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

Beitrag von ts-soft »

dysti hat geschrieben:Ist das Array begrenzt oder nur abhängig vom Arbeitsspeicher?
Der Speicher Deines Strings zeigt auf das Array, somit sollte die Grösse klar sein :wink:
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.
Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Arbeiten mit Zeiger/Pointer

Beitrag von STARGÅTE »

[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.
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
Benutzeravatar
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Re: Arbeiten mit Zeiger/Pointer

Beitrag von Kurzer »

Danke für die Erklärungen. :)
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.
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Re: Arbeiten mit Zeiger/Pointer

Beitrag von dysti »

Von mir auch DANKE.
Werde später sicherlich noch Fragen haben
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Antworten