Struktur-Variable über Funktion per Zeiger kopieren

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Struktur-Variable über Funktion per Zeiger kopieren

Beitrag von NicTheQuick »

Dein C-Code würde so übersetzt werden:

Code: Alles auswählen

; int a;
Define a.l
; a = 5;
a = 5
; int *zeiger;
Define *zeiger.Long
;zeiger = &a;
*zeiger = @a

Debug *zeiger\l
Long deshalb, weil int in C immer 32 Bit hat.
Bild
Beefi
Beiträge: 88
Registriert: 16.01.2017 17:38

Re: Struktur-Variable über Funktion per Zeiger kopieren

Beitrag von Beefi »

Ja genau, was ich jedoch meinte:

Code: Alles auswählen

define *a.l
*a = 5
Also einen Zeiger, der "irgendwo" hinzeigt und dort eben die 5 speichert.
Hatte mich aber vertan...der Speicherbereich wird in den hier genannten Beispielen ja mit AllocateMemory() reserviert, ich bin heute wohl zu müde :oops:
Also alles gut :allright:
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: Struktur-Variable über Funktion per Zeiger kopieren

Beitrag von ts-soft »

Beefi hat geschrieben:Ja genau, was ich jedoch meinte:

Code: Alles auswählen

define *a.l
*a = 5
Das ist so nicht erlaubt, bzw. nicht mehr!

Ein Pointer (Zeiger) ist niemals von einem nativem Typ, also es gibt kein *a.l sondern nur *a (ohne .nativer Typ).
Die einzigen Typen, die erlaubt sind, dienen der Strukturierung des Memories, also *a.long oder *a.integer usw.,
hiermit ist dann die Strukture Long bzw. Integer gemeint, nicht der native Typ .l oder .i,
damit dann z.B. über Ihre Strukture per *a\l = 5 erreicht werden!
Dein obiger Code würde also lauten:

Code: Alles auswählen

Define a.l
Define *a.Long = @a
*a\l = 5
Gruß
Thomas
Zuletzt geändert von ts-soft am 09.02.2017 07:21, insgesamt 2-mal geändert.
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
Sicro
Beiträge: 955
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: Struktur-Variable über Funktion per Zeiger kopieren

Beitrag von Sicro »

Beefi hat geschrieben:@Sicro:
[...]das mit der Angabe von Map in den Parametern habe ich noch nirgends in der Hilfe gesehen.[...]
PB-Hilfe => Prozeduren-Unterstützung => Procedure : EndProcedure
Arrays können mit Hilfe des Schlüsselworts Array als Parameter übergeben werden, verknüpfte Listen mittels des Schlüsselworts List und Maps mittels Schlüsselworts Map.
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Benutzeravatar
#NULL
Beiträge: 2235
Registriert: 20.04.2006 09:50

Re: Struktur-Variable über Funktion per Zeiger kopieren

Beitrag von #NULL »

@beefi
in verbindung mit dem CopyStructure() würde es gehen, ich empfehle dir dann aber die sauberere variante 1) von helpy, bzw generell sogar eher die von sicro, ganz ohne pointer.
Beefi hat geschrieben: Also wenn ich das mal in C als Beispiel nehme:

Code: Alles auswählen

int a;
a = 5;
int *zeiger;
zeiger = &a;
...hier zeigt "*zeiger" jetzt auf die Variable "a" (also auf 5), bzw. "zeiger" beinhaltet die Adresse zu "a".


Es würde auch gehen (wie in PureBasic):

Code: Alles auswählen

int *zeiger;
*zeiger = 5;
Aber meines Wissens ist der Speicher dann ja nicht reserviert und es führt unter Umständen zu nem Programm-Crash.
Ist das in PureBasic nicht so?
das asterisk ist in pb kein dereference operator, und addresse 5 ist natürlich blödsinn, deshalb der umweg über structure wie im beispiel von NicTheQuick (oder mittels Peek/Poke).
bei *zeiger\l ist das * auch keine dereferenzierung, aber der zugriff auf das strukturfeld kommt effektiv einer gleich.
my pb stuff..
Bild..jedenfalls war das mal so.
Antworten