Structure Frage

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Wenn du Pointern arbeitest, musst du daran denken, dass alles ByRef
übergeben wird und ByVal.
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

@dw

hallo, *.klopf.klopf.*
wie du in der proc auf die daten der ganzen structure zugreifen
kannst, wurde gezeigt. und zwar ohne @. wenn ich mich nicht
irre brauchst du ein @ sowieso nur für primitive typen. arrays,
und struktuierte typen geben ihre addresse einfach so preis,
wenn du kein index oder feld angibst.
my pb stuff..
Bild..jedenfalls war das mal so.
Hellhound66
Beiträge: 476
Registriert: 23.03.2005 23:19

Beitrag von Hellhound66 »

Vielleicht will man ja, oder vielleicht will ich ja auch,
Geil. Wir sind in einer Ratestunde..

@dw:
Wenn du eine Struktur übergeben möchtest, dann kannst du das auf die Art und Weise machen, wie es #NULL dargestellt hat.
Dass Adressierungszeichen @ ist für die Strukturübergabe nicht notwendig. Du musst nur aufpassen, dass du mit einem Zeiger auf eine Struktur in der Prozedur arbeitest.

Beispiel für Zeiger:

Code: Alles auswählen

;# Eine Struktur deklarieren
Structure _STRUC
    Feld1.l
    Feld2.l
EndStructure

;# Eine lokale Variable vom Typ _STRUC definieren. (Verbraucht sizeof(_STRUC) Bytes)
Lokal._STRUC

;# Einen Zeiger auf einen strukturierten Speicherblock vom Typ _STRUC definieren.
;# Würde ich jetzt ohne Initialisierung in den Zeiger schreiben (*Zeiger\Feld1 = 3),
;# dann würde ich einen IMA (invalid memory access) bekommen.
*Zeiger._STRUC

;# Hier weise ich dem Struktuzeiger "*Zeiger" die Adresse der lokalen Variable "Lokal" zu.
;# dadurch zeigen beide Variablen auf den gleichen Speicherbereich.
*Zeiger = Lokal


;# Wenn ich jetzt über "Zeiger" einen Wert lade, ändert er sich natürlich in Lokal auch, weil es
;# ja der gleiche Speicherbereich ist.
*Zeiger\Feld1 = 666

;# Mittels Debug überprüfe ich das, und siehe da, es ist gleich.
Debug Lokal\Feld1

;# Umgekehrt gehts natürlich auch:
Lokal\Feld2 = 999
Debug *Zeiger\Feld2
Optimismus ist ein Mangel an Information.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

und wie NTQ bereits angedeutet hat:
du übergibs die strukturierte Variable selber, nicht deren werte.
d.h. wenn du die werte innerhalb der Proc manupulierst,
dann ändern sie sich auch im Hauptprogramm.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
DW

Beitrag von DW »

Genau das will ich ja auch machen.

Danke für eure Antworten, war nett in diesem thread. Für mich ist das Gespräch beendet. Thread kann geschlossen werden.
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Strukturen übergeben und maipolieren

Code: Alles auswählen

Procedure test(*format.test)

  *format\a = 100
  
EndProcedure
FF :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Antworten