Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 30.06.2009, 10:48 Titel: Pointer in eine Variable umwandeln? |
|
|
Man stelle sich vor man zeigt auf eine Adresse wo sich eine UDT mit bekannten Datentyp befindet.
Gibt es eine Möglichkeit wie man (unter vorraussetzung der Kenntnis der Addresse) eine "normale" Variable erzeugt die sich genau auf diesem Speicherplatz befindet?
Kurzes Beispiel:
Code: |
type _test
x as integer
y as integer
end type
dim a as _test ptr = new _test
a->x = 100
a->y = 200
|
Nun möchte ich aber nicht per Zeiger aufs neue _test zugreifen, sondern als "normale" variable. Kann man das nachträglich irgendwie wieder umwandeln? so das man wieder a.x = 100 und a.y = 200 schreiben kann? Es muss aber definitiv die gleiche addresse sein! Also keine kopie! |
|
Nach oben |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 30.06.2009, 11:17 Titel: |
|
|
Code: |
type _test
x as integer
y as integer
end type
dim a as _test ptr = new _test
*a.x = 100
*a.y = 200
|
Code: |
type _test
x as integer
y as integer
end type
dim a as _test ptr = new _test
dim b as _test = *a
b.x = 100
b.y = 200
|
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 30.06.2009, 11:25 Titel: |
|
|
@ TPM: die erste möglichkeit kannte ich. geht mit WITH *a .... END WITH aber noch einfacher.
die 2. möglichkeit ist leider nicht das was ich erreichen möchte. Es sieht augenscheinlich gut aus, aber in b wird leider nur eine kopie von *a angefertigt. spätestens hier fällt es auf:
Code: |
type _test
x as integer
y as integer
end type
dim a as _test ptr = new _test
dim b as _test = *a
b.x = 100
b.y = 200
'in x und y von a und b sollten nun 100 und 200 stehen, tuts aber nur in b:
print a->x
print a->y
'a und b sind auch 2 verschiedene Addresse:
print a
print @b
|
Ich hätte aber gerne das Original in b und keine Kopie. ... |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 30.06.2009, 11:36 Titel: |
|
|
Wenn man *zeiger an eine sub mit einem parameter der per BYREF übergeben wird, hat man die Original-Variable:
Code: |
type _test
x as integer
y as integer
end type
sub testen (byref testvar as _test)
print "TestVAR.X=" & testvar.x
print "TestVAR.Y=" & testvar.y
print "TestVAR Addresse = " & @testvar
end sub
dim testptr as _test ptr = new _test
testptr->x = 100
testptr->y = 200
print "TestPTR.X=" & testptr->x
print "TestPTR.Y=" & testptr->y
print "TestPTR Addresse = " & testptr
print ""
testen *testptr
sleep
|
Aber leider steht diese Variable nur innerhalb der Sub zur verfügung... Die hätte ich aber auch gerne in der Hauptroutine!
Meine eine Frage, mit der ich mich wahrscheinlich weit ausm fenster lehne:
"Kann man eine Variable mit der Referenz auf den Inhalt bei bekannten Addresse initialisieren?" Irgendwie "Dim ByRef" oder sowas... puh.. sorry für mein kauderwelsch... |
|
Nach oben |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 30.06.2009, 13:15 Titel: |
|
|
Code: |
type _test
x as integer
y as integer
end type
dim a as _test ptr = new _test
dim b as _test
@b = a
b.x = 100
b.y = 200
|
so kann mans auch machen. ABER; das is echt gefährlich!
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 30.06.2009, 13:55 Titel: |
|
|
Klingt nicht schlecht, aber da streikt der Compiler:
z:/FBIDETEMP.bas( error 25: Invalid data types, found '=' in '@b = a'
Es wäre natürlich ideal, wenn man die Addresse einer Variable nachträglich ändern könnte... aber sooo einfach ist das anscheinend nicht.. |
|
Nach oben |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 30.06.2009, 16:59 Titel: |
|
|
doch doch .. da sgeht schon ... eventuell muss man da nur etwas casten ... hab das jetzt nicht expliziet getestet
Code: |
cast(any ptr, @b) = cast(any ptr, a)
|
So sollte man jedoch nicht unbedingt arbeiten, da man den pointer auf eine real existierende variable löscht, und somit beim programmende einen speicher nicht frei machen kann, der noch existiert. Zusättlich entsteht das problem des "double free" .. das entsteht, wenn man 2 variablen hat, dessen pointer auf die selben speicherbereiche zeigt, und beide nach programmende frei gemacht werden sollen. Es würde dann 2x versucht den selben bereich zu deallocen. das führt zu einem speicherzugriffsfehler. und kann unter umständen zu weit problematischeren fehlern führen, die (vorallem unter win) zu schwerwiegenen stabilitätsproblemen führen können, bishin zu einem systemcrash.
vorbeugen kann man das eventuell duch das zwischenspeichern des alten pointer und nach gebrauch diesen wieder auf den alten speicher linken. dann werden die speicher wieder richtig deallcot.
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 30.06.2009, 17:38 Titel: |
|
|
Ja sowas in der Art hatte ich mir auch schon gedacht.. aber HEY, Arbeitsspeicher gibts heutzutage genug zum platt machen XD .. (entschuldigt bitte den unseriösen unterton)
Kann man nicht sowas wie eine "leere" variable erstellen? Die keinen Speicher alloziiert hat? hmm.. vielleicht kommt man da mit assembler ran? Da bin ich leider nur kein Fachmann für :-/
Ach und:
Code: |
TYPE _test
x AS INTEGER
y AS INTEGER
END TYPE
DIM a AS _test PTR = new _test
DIM b AS _test
CAST(ANY PTR, @b) = CAST(ANY PTR, a)
b.x = 100
b.y = 200
sleep
|
funktioniert leider auch nicht:
z:/FBIDETEMP.bas(9) error 25: Invalid data types, found '=' in 'CAST(ANY PTR, @b) = CAST(ANY PTR, a)'
So eine Addresse kann man anscheinend nur lesen, aber nicht schreiben.
Gibts kein verstecktes Schlüsselwort das beim dimensionieren eine Referenz anstatt einer Variable oder Pointer anlegt? Bei der übertragung per Parameter an eine Sub funktionierts ja auch per "ByRef" ... |
|
Nach oben |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 30.06.2009, 18:50 Titel: |
|
|
öm ... deine "referenz", die du erzeugen willst, ist ja der "Ptr" bzw. "Pointer". Ein "Pointer" ist eien Referenz auf etwas anderes.
Speicher alokieren ohne ihn zu alokieren ist irgend wie ... öm .. sinnlos ... du könntest ihn niemals nutzen. duhättest nur ein label ohne sinn udn zweck .. einfach nur ne variable, mit der du nichts anfangen könntest.
Die Variable brauchst du schon .. Die Variable ansich ist ja nichts anderes als ein stückspeicher. Wie du diesen stück speicher verwendest ist im grunde auch total egal. du kannst damit machen, was du willst. Die Programmiersprache bestimmt jedoch, was du damit machen "darfst" .. Diese einschränkugn dient nur dafür, das du keinen "bullshit" mit dem programm machen kannst.
Willst du einen Speicher, der als "mir egal was das speichert" haben willst, dann musst du den speicher als "Any ptr" definieren. Das ist dann für all mögliches nutzbar. Wird jedoch vom Compiler verwendungstechnisch nur bedingt überwachst. Castest du Daten auf diesen speicher, kann der compiler beim einlesen nicht mehr nachvollziehen, was dort strin steht, und für was es genutzt werden soll.
Aber, vieleicht gibt es eine alternative für dein Problem.
Was genau hast du denn vor?
PS: Die adresse kansnt du auch schreiben, ich schau gleich ma, warums ned geht.
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 30.06.2009, 19:43 Titel: |
|
|
OneCypher hat Folgendes geschrieben: | Es wäre natürlich ideal, wenn man die Addresse einer Variable nachträglich ändern könnte... aber sooo einfach ist das anscheinend nicht.. |
Die Adresse wird ja vom Betriebssystem, beim laden des Programms in einen Speicherbereich im RAM, bestimmt.
Evtl. hilft dir dieses Demo: Code: | TYPE _test
x AS INTEGER
y AS INTEGER
END TYPE
DIM a AS _test PTR = new _test
Dim b As _test
Print "Adresse| Inhalt"
Print Hex(@a);" = ";Hex(a); " aha, Pointer!"
a->x = 100 'Schreibweise so
(*a).y = 200 'oder so
Print Hex( @(*a).x );" = ";(*a).x 'Schreibweise so
Print Hex( @(a->y) );" = ";(a->y) 'oder so
Print
Print Hex(@b);" Adresse Variable "
b.x = 300
b.y = 400
Print Hex( @b.x );" = "; b.x
Print Hex( @b.y );" = "; b.y
SLEEP |
_________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
Löwenherz

Anmeldungsdatum: 25.08.2008 Beiträge: 86 Wohnort: auf einer sonnigen Insel :)
|
Verfasst am: 30.06.2009, 22:34 Titel: |
|
|
hi volta, hi onecypher, puppetmaster,
habe einfach mal eine kleine Änderung vorgenommen am script und frage nach, ob das so ok ist... neue adresse mit neuer variable ??? habe ich das richtig gemacht ? war nur ein experiment...
Code: | TYPE _test
x AS INTEGER
y AS INTEGER
z as integer
END TYPE
DIM a AS _test PTR = new _test
DIM b AS _test
DIM c as _test
PRINT "Adresse| Inhalt"
PRINT HEX(@a);" = ";HEX(a); " aha, POINTER!"
a->x = 100 'Schreibweise so
(*a).y = 200 'oder so
a->z = 300 'Schreibweise so
(*a).x = 400 'oder so
PRINT HEX( @(*a).x );" = ";(*a).x 'Schreibweise so
PRINT HEX( @(a->y) );" = ";(a->y) 'oder so
PRINT HEX( @(a->z) );" = ";(a->x) 'oder so
PRINT
PRINT HEX(@b);" Adresse Variable "
b.x = 300
b.y = 400
b.z = 500
PRINT HEX( @b.x );" = "; b.x
PRINT HEX( @b.y );" = "; b.y
PRINT HEX( @b.z );" = "; b.z
print
PRINT HEX(@c);" neue Adresse mit neuer Variable "
c.x = 600
c.y = 700
c.z = 800
PRINT HEX( @c.x );" = "; c.x
PRINT HEX( @c.y );" = "; c.y
PRINT HEX( @c.z );" = "; c.z
SLEEP |
ein feedback wäre gut, ob ich das soweit verstanden habe... haha...
danke für die infos zum thema pointer, ist noch recht neu für mich, aber interessant... bis bald, Löwenherz _________________ Das Leben ist wie eine Pralinenschachtel, man weiß nie, was dort drinnen für tolle wie böse Überraschungen stecken |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 01.07.2009, 00:00 Titel: |
|
|
aaahh moment... das verwirrt mich jetzt total... mal zurück zu den Wurzeln:
Ein Pointer ist eine Variable (im Prinzip 32-Bit UInteger). Auch ein Pointer hat, wie jede gewöhnliche Variable, eine eigene Addresse. Das ist dann die Addresse im Speicher wo die "Zahl" drinnen steht, die widerrum die Addresse zum eigentlichen Ziel bedeutet.
Aber das was ich möchte, ist kein Pointer!
Das was ich suche ist eine Variable mit der man auf andere Variablen referenzieren kann. Also eine Variable die genau so aussieht wie jede andere des gleichen Datentyps, die aber ihren Speicherbereich mit einer anderen Variable teilen kann. Am besten natürlich so, dass man diese Referenzierung zur Laufzeit ändern kann...
Vom Verhalten her, wie eine Variable die man per ByRef an eine Sub oder Funktion übergeben hat.
Da kann ich auch alles mögliche als Parameter übergeben und mit dem ORIGINAL weiterarbeiten. (deutlich zu sehen im Code des 4. Post in diesem Thread)
*seufzt* .. sorry dass ich euch so verwirre mit meinen seltsamen gedankengängen..
Um auch mal kurz den Grund meines Posts zu erklären:
In einigen meiner Programme arbeite ich mit UDTs die per Pointer auf andere UDTs zeigen, aber auch feste UDTs noch als element enthalten können. Das kann dann schon mal solche auswüchse bekommen:
Code: |
Fenster1->Form.Object("Button1")->Caption.text = "Weiter"
Fenster1->Form.Object("Button1")->Caption.FontStyle = 2
print "Button1 - Text: " & Fenster1->Form.Object("Button1")->Caption.text
print "Button1 - Text-Stil: " & Fenster1->Form.Object("Button1")->Caption.FontStyle
|
Und nun hätte ich gerne das ganze etwas.. eleganter geschrieben. Irgendwann weiss man einfach nicht mehr wann -> und wann . zwischen die elemente gehört... |
|
Nach oben |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 01.07.2009, 00:25 Titel: |
|
|
@ Löwenherz ... Nicht ganz.
Auf Reale UDT's die direkt allociert wurden greift man mit "." zu.
Code: |
Type bla
a as uinteger
b as uinteger
end type
dim var as bla
var.a = 10
|
auf Referenzierte Variablen greift man mit "->" zu
Code: |
Type bla
a as uinteger
b as uinteger
end type
dim var as bla Ptr
var->a = 10
|
Erzeugt man eine reguläre variable udn refernziert man diese bleibt das prinzip erhalten.
Code: |
Type bla
a as uinteger
b as uinteger
end type
dim var as bla
Dim varref as bla ptr
varref = @var
var.a = 10
varref->a = 20
|
Dabei ist varref eien referenz von var. Die Daten welche man in var ablegt sind auch in varref verfügabr. gleiches ist umgedreht. ändert man in varref die daten ab, ändert sich dies auch in var.
Man kann das wohl am besten damit vergleichen das mich sich vorstellt einen speicher zu haben. Dieser speicher ist beispielsweise 10 byte gross. jedes byte identifiziert sich durch eienn vortlaufende nummer.
Erzeugst du eine Variable wird in FB die speichernummer hinterlegt die zu dieser variable gehört.
greifst du auf die variable zu wird von fb aus direkt in den speicher egschrieben
erzeugst du eine referenz variable wird das selbe getan. jedoch ist der dateninhalt dieser variable die adressnummer einer anderen variable.
greifst du nun über die referenz variable auf die daten zu weis fb, das es nicht in den speicher schreiben darf, sondern hohlt sich die daten aus dieser variable udn nimmt an, das diese nummer einen andere adresse ist, welche die eigentlichen daten beinhaltet.
darum ist eien referenz (verweis / hinweis / ...) etwas, das auf etwas anderes "Zeigt" (Pointer = Zeiger)
Er zeigt mit deinen Daten auf eine andere Speicheradresse.
EDIT
@OneCypher
Das was du vor hast ist EXTREM!!!!!!!!! gefährlich!!!!!!!!!
Lass es so wie es ist. Willst du das wirklich ändern, ist das noch MEHR aufwand als das du es jetzt schon hast.
Doppelreferenzierte direkte variablen sind extrem schwer zu handhaben und speichertechnisch SEHR gefährlich!. Es gehen beim casten Pointer verlohren die du, vorallem bei funktionsrückgaben für immer verliehrst und damit dein speicher flöten geht. Sol das Programm länger laufen ist es ratsam solche dinge nicht zu machen. (Auserdem ist das ein ganz ganz schlechter programmierstiel, wenn man nicht wirklich einen explizieten und wirklich triftigen grund hat das auf solch eine komplizierte weise zu machen)
Ein grund hätte ich sogar grad im Kopf: TUT: Threading Optimierung
Nichts gegen dich, aber lass davon die Finger weg. das ist schädlicher als es nützt.
Alternativ kann ich dir noch anbieten es über Property Funktionen zu lösen. Dann sparst du dir die "->"
EDIT 2
Vieleicht hilft das: http://www.freebasic-portal.de/index.php?s=fbporticula&mode=show&id=861
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 01.07.2009, 09:57 Titel: |
|
|
@TPM: Interessanter Text, aber bei kunstrukten wie
Code: | .Object("Button1")-> |
steht man vor anderen problemen.. während ".Object(...)" eine normale funktion innerhalb der UDT ist, sucht die Funktion nach "Button1" und gibt den pointer aufs gefundene Objekt (welches den Titel "Button1" hat) zurück.
Ich kann in dieser Funktion aber NUR einen Pointer zurückgeben um aufs gesuchte Original-Objekt zuzugreifen.
Irgendwie schon doof... man kann parameter byref an eine Funktion übergeben, aber nicht byref zurückgeben.. Alles was von Funktionen zurückgegeben werden kann ist immer per Value.
Mir ist schon klar, dass verwaiste oder doppelt-vergebene Speicherbereiche schwierig zu handlen sind.. Das Problem hat man auch wenn man mit pointern Arbeitet. |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 01.07.2009, 11:53 Titel: |
|
|
Ok, anscheint hat sich keiner mein Beispiel oben genau angesehen
Der Kompiler verbindet bei einer Dimensionierung immer Variablenname mit Adresse des reservierten Speicherbereichs.
Man kann weder den Variablennamen ein zweites mal benutzen noch den reservierten Speicherbereich einen anderen Variablennamen geben.
Also keine Dimensionierung als "Dim b As _test", da dann mit b ein anderer Speicherbereich verbunden wird!
Aber als "(*a)" habe ich Zugriff auf den gewünschten Speicherbereich !
Trick!
Wenn ich keine Variable "b" (im Beispiel unten "Doppel" genannt) dimensionieren kann, dann definiere ich "b" und verbinde damit "(*a)" (Adresse des Speicherbereichs)!!!
Code: | Type _test
x As Integer
y As Integer
End Type
Dim Original As _test Ptr = New _test
'Dim Doppel As _test
#Define Doppel (*Original) '<- Trick
Original->x = 100
Original->y = 200
Print Hex(Original), Original->x, Original->y
Print Hex(@Doppel), Doppel.x, Doppel.y
Print
Doppel.x = 300
Doppel.y = 400
Print Hex(@Doppel), Doppel.x, Doppel.y
Print
With Doppel 'auch das funktioniert ;))
.x = 500
.y = 600
End With
Print Hex(@Doppel), Doppel.x, Doppel.y
Print Hex(Original), Original->x, Original->y
Sleep |
_________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 01.07.2009, 12:13 Titel: |
|
|
ach .. genau .. darum geht das ja mit dem casten ned .. hab ich ganz übersehen.
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
 |
croco97

Anmeldungsdatum: 04.11.2005 Beiträge: 260
|
Verfasst am: 01.07.2009, 12:41 Titel: Re: Pointer in eine Variable umwandeln? |
|
|
OneCypher hat Folgendes geschrieben: |
Code: |
dim a as _test ptr = new _test
(...)
a->x = 100
a->y = 200
|
|
Ketzerische Frage: Was ist daran schlecht? Weshalb möchtest du eine andere Schreibweise haben?
Weiss nicht, ob das noch aktuell ist, aber in meiner Zeit (90er-Jahre) habe ich streng zu unterscheiden gelernt zwischen dynamischer Allokation (Heap) und statischer Allokation (Stack).
Statisch:
Code: |
dim as _test x
x.a=100
|
Dynamisch: Wie oben zitiert mit ptr und allocate, bzw. new.
Wenn du die von dir bevorzugte Schreibweise wählst, nimmst du dem Leser (ggf. dir selbst) die Info, welche von beiden Arten hier benutzt wird. Das ist der grosse Nachteil. Und der Vorteil? Bitte hier eintragen:
--------------------------------------------------------
VG!
Croco |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 01.07.2009, 14:05 Titel: |
|
|
Vorteil: Bessere lesbarkeit bei komplexen aufrufen oder abfragen in verschachtelten UDTs.
Ich programmiere auch oft in VBA und das ists mir ziemlich egal ob der Speicher einer variable aufm HEAP oder aufm STACK liegt... ich halte die unterscheidung eh für überholt..
*räusper* .. ohje.. was hab ich da geschrieben? war das hier in diesem Forum zu provokant? |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 01.07.2009, 15:18 Titel: |
|
|
OneCypher hat Folgendes geschrieben: | *räusper* .. ohje.. was hab ich da geschrieben? | Du sagst es ...
OneCypher hat Folgendes geschrieben: | war das hier in diesem Forum zu provokant? | Nö ..
Deine Frage war etwa so:
[Satire] Ich hab ein Konto Nr 123456 bei der Sparkasse, warum bekomme ich kein Geld vom Konto 123456 bei der Volksbank?
Und Croco will dir nur sagen, dass du zwischen Auszahlung am Schalter und am Automaten unterscheiden sollst.
[/Satire] _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 01.07.2009, 16:26 Titel: |
|
|
@Volta: Hehe! Bei deinem satirischen Beispiel bist du genau in die Falle getappt.. Wenn ich bei der Volksbank bin, kann ich auch geld am Automaten der Sparkasse bekommen und umgekehrt!! Kostet allerdings nur gebühren
Jemanden, der Systemnah programmiert und sich auch mal den ASM-Code ausgeben lässt um evtl. per Hand zu optimieren, ists natürlich wichtig wo seine Variable liegt.
Aber als "Wald-Und-Wiesen-Programmierer", der "nur" programmiert um bestimmte Aufgaben zu erfüllen reichts vollkommen aus "irgendwo" ein konto auf "irgendeiner" bank zu haben, solange er an jedem Automaten an sein geld kommt. Übrigens sind Direct-Banken bereits darauf ausgelegt keine eigenen Schalter zu betreiben. Darin liegt zumindest für manche menschen die zukunft! (aber bei weitem nicht für alle)
Zurück zum eigentlichen Problem:
Teilweise hab ich noch viel häftigere Konstrukte als die ich hier schon erwähnte. Und nach jedem Element muss man entweder nachsehen oder raten obs ein . oder ein -> ist, was man dazwischenfügen soll.
Und für meine Aufgaben reichts leider nicht aus UDTs per Value zurückzugeben. Ich möchte ja eigentlich immer ans original ran. Daher dann Pointer auf UDTs. Ist halt blöd, aber es geht bisher nicht anders... |
|
Nach oben |
|
 |
|