|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
OEG
Anmeldungsdatum: 01.08.2020 Beiträge: 8 Wohnort: Séte / France
|
Verfasst am: 01.08.2020, 13:31 Titel: Structure als Parameter |
|
|
Hallo,
Ich bin zwar neu hier und in FreeBasic,
arbeite aber schon ein paar Jahre mit Blitz-,PureBasic als 'Armateur'!
Nun habe ich eine Frage,die ich selber nicht lösen kann.
es geht um folgendes:
ich möchte einer Procedure(Sub oder Function) eine Variable übergeben, weiss aber noch nicht,welchen DatenTyp diese haben wird. Es ist aber auf jeden Fall ein 'UDT'.
Da ich aber einen Typ angeben muss(jedenfalls weist mich der Compiler vehement darauf hin), frage ich mich, ob ich einen
Zeiger auf die Structure(Type) erzeugen kann.
Ich dachte zuerst,einfach die benötigte Grösse zu übergeben,Aber dann kann ich ja nicht auf die Member's zugreifen.
Kann da vllt jemand helfen?
Olaf _________________ IF A=B AND B=C THEN IF A=C THEN PRG IS RUNNING
ELSEIF A NOT C THEN REALLIVE IS RUNNING
ENDIF |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4597 Wohnort: ~/
|
Verfasst am: 01.08.2020, 14:08 Titel: |
|
|
Ich weiß noch nicht genau, was für dich in Frage kommt, daher mal ein paar Lösungsideen.
- Was du grundsätzlich machen kannst, ist die Übergabe eines ANY PTR. Das würde ich aber eher als brutal einstufen, und an die Members kommst du dann auch nur über Pointer-Rechnung, was ich für wenig sinnvoll halte.
- Eine elegante Lösung wäre die Verwendung von Vererbung. Das setzt voraus, dass alle UDTs, die an die Prozedur übergeben werden können, einen gemeinsamen Typ besitzen. Ich bin da in der Syntax nicht mehr so drin, aber ich könnte es mir so vorstellen wie in der Referenz zu IS im zweiten Beispiel:
https://www.freebasic-portal.de/befehlsreferenz/is-vererbung-oop-635.html
_________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
OEG
Anmeldungsdatum: 01.08.2020 Beiträge: 8 Wohnort: Séte / France
|
Verfasst am: 01.08.2020, 14:27 Titel: |
|
|
Gott,bin ich Blöd!!!
Klar ich declariere einen 'DummyType,
der die StandardMember's hat,
erweitere Ihn mit dem gewünschten Type
und habe einen StandardParameter MIT definiertem DatenTyp
Meine Function sollte nämlich noch zwei Felder dazugeben,
das macht jetzt der 'ProtoType'
Jetzt noch eine Frage:
Als Rückgabe einer Function brauche ich einen Zeiger auf auf einen MemoryBlock! wie declariere ich diesen?, der brauch ja auch einen Typ,oder?
Ist etwas verwirrend mit FB, in PBist ein Pointer ja sein eigener Typ.
Olaf _________________ IF A=B AND B=C THEN IF A=C THEN PRG IS RUNNING
ELSEIF A NOT C THEN REALLIVE IS RUNNING
ENDIF |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4597 Wohnort: ~/
|
Verfasst am: 01.08.2020, 14:43 Titel: |
|
|
Ja, der Block braucht ebenfalls einen Typ, z. B.
Code: | FUNCTION testfunktion(parameter AS MyType) AS BYTE PTR
...
|
Auch hier würde wieder, wenn es da kein einheitlicher Typ Sinn macht, ein ANY PTR funktionieren; ich denke aber, dass ein BYTE PTR nicht schlecht ist. FreeBASIC arbeitet nämlich mit Zeigerarithmetik, welche die Größe des zugrundeliegenden Datentyps miteinbezieht; siehe z. B. hier:
https://www.freebasic-portal.de/befehlsreferenz/eckige-klammern-449.html (Abschnitt "Pointerindizierung") _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
OEG
Anmeldungsdatum: 01.08.2020 Beiträge: 8 Wohnort: Séte / France
|
Verfasst am: 01.08.2020, 14:56 Titel: |
|
|
Für eine Adr. sollte also ein< Integer Ptr > ausreichen?!
Olaf _________________ IF A=B AND B=C THEN IF A=C THEN PRG IS RUNNING
ELSEIF A NOT C THEN REALLIVE IS RUNNING
ENDIF |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4597 Wohnort: ~/
|
Verfasst am: 01.08.2020, 15:00 Titel: |
|
|
Ja, reicht aus. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
OEG
Anmeldungsdatum: 01.08.2020 Beiträge: 8 Wohnort: Séte / France
|
Verfasst am: 01.08.2020, 15:39 Titel: |
|
|
Merci,
Ich glaube,das reicht für's erste.
Olaf _________________ IF A=B AND B=C THEN IF A=C THEN PRG IS RUNNING
ELSEIF A NOT C THEN REALLIVE IS RUNNING
ENDIF |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1211 Wohnort: Ruhrpott
|
Verfasst am: 01.08.2020, 15:53 Titel: |
|
|
Hallo DEG und willkommen im Forum!
Wie ist das in deiner ersten Frage gemeint: Bekommt die Prozedur zur Laufzeit des Programms verschiedene Typen übergeben, oder weisst du nur jetzt, während du das Programm schreibst, noch nicht genau, wie der UDT aussieht?
Im zweiten Fall ist das ganz einfach. Du übergibst einen Parameter vom Typ des UDTs. Den genauen Aufbau kannst du dann während des Programmierens anpassen: Code: | Type tHello
As String welt
As String world
As String mundo
End Type
Dim As tHello hello
hello.welt = "Hallo Welt"
hello.world = "Hello world"
hello.mundo = "Hola mundo"
Sub printHello(gruesse As tHello)
Print gruesse.welt
Print gruesse.world
Print gruesse.mundo
End Sub
printHello(hello)
Sleep
|
Im zweiten Fall kannst du dir einen passenden Kombityp zusammenbasteln: Code: | Type tTyp1
As Integer zahl1
As Integer zahl2
As Integer zahl3
As ZString*100 text1
End Type
Type tTyp2
As Single zahl1
As Double zahl2
As ZString*100 text1
As ZString*100 text2
End Type
Type tTyp3
As ZString*100 text1
As ZString*100 text2
As ZString*100 text3
End Type
Type tKombiTyp
As Integer welchertyp
Union
t1 As tTyp1
t2 As tTyp2
t3 As tTyp3
End Union
End Type
Sub mehrereTypen(t As tKombityp)
Select Case t.welchertyp
Case 1
Print t.t1.zahl1
Print t.t1.zahl2
Print t.t1.zahl3
Print t.t1.text1
Case 2
Print t.t2.zahl1
Print t.t2.zahl2
Print t.t2.text1
Print t.t2.text2
Case 3
Print t.t3.text1
Print t.t3.text2
Print t.t3.text3
Case Else
Print "Kenn ich nicht!"
End Select
End Sub
Dim As tKombiTyp ty
With ty
.welchertyp = 1
.t1.zahl1 = 1
.t1.zahl2 = 4
.t1.zahl3 = 9
.t1.text1 = "Hallo"
End With
mehrereTypen(ty)
With ty
.welchertyp = 2
.t2.zahl1 = 100
.t2.zahl2 = 298
.t2.text1 = "Hier ich,"
.t2.text2 = "wer da?"
End With
Print
mehrereTypen(ty)
With ty
.welchertyp = 3
.t3.text1 = "Wenn einer einen Ast zersaegt"
.t3.text2 = "und damit einen Gast erlegt"
.t3.text3 = "dann wird das mit Knast belegt."
End With
Print
mehrereTypen(ty)
Sleep |
Alternativ (das würde ich empfehlen) kannst du die Prozedur auch überladen: Code: | Type tTyp1
As Integer zahl1
As Integer zahl2
As Integer zahl3
As String text1
End Type
Type tTyp2
As Single zahl1
As Double zahl2
As String text1
As String text2
End Type
Type tTyp3
As String text1
As String text2
As String text3
End Type
Sub mehrereTypen OverLoad (t As tTyp1)
Print t.zahl1
Print t.zahl2
Print t.zahl3
Print t.text1
End Sub
Sub mehrereTypen (t As tTyp2)
Print t.zahl1
Print t.zahl2
Print t.text1
Print t.text2
End Sub
Sub mehrereTypen (t As tTyp3)
Print t.text1
Print t.text2
Print t.text3
End Sub
Dim As tTyp1 ty1
Dim As tTyp2 ty2
Dim As tTyp3 ty3
With ty1
.zahl1 = 1
.zahl2 = 4
.zahl3 = 9
.text1 = "Hallo"
End With
mehrereTypen(ty1)
With ty2
.zahl1 = 100
.zahl2 = 298
.text1 = "Hier ich,"
.text2 = "wer da?"
End With
Print
mehrereTypen(ty2)
With ty3
.text1 = "Wenn einer einen Ast zersaegt"
.text2 = "und damit einen Gast erlegt"
.text3 = "dann wird das mit Knast belegt."
End With
Print
mehrereTypen(ty3)
Sleep
|
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
OEG
Anmeldungsdatum: 01.08.2020 Beiträge: 8 Wohnort: Séte / France
|
Verfasst am: 01.08.2020, 17:00 Titel: |
|
|
Hallo
Es ist die 2. Variante!
Das heisst, die 'Function ist ein Constructor,
und da die 'Class' ja nicht nur eine Sache Abdecken soll und
auch in anderen Prg's laufen soll, muss Sie mit 'Unbekannten'
arbeiten.
Ich habe jetzt erst mal folgenden Code gebastelt
Code: | Type punkt ' TypeBeispiel der gebraucht wird
x As Integer
y As Integer
End Type
Type typdef ' Type der ein 'Dumy as TypeBeispiel' Ptr aufnimt
mtyp As Integer Ptr
End Type
Type ListType 'Type der die Dumy an die Class übergibt
ltlast As Integer Ptr
ltnext As Integer Ptr
prototyp As typdef
End Type
'
' So sollte es keine Probleme geben,wenn verschiedene 'Type's' an ListType übergeben werden
'
Type L_List ' <Class>,die Verschiedene Variable & LinkedList erzeugt
DECLARE CONSTRUCTOR(Dumy As ListType) ' Hier soll der Constructor den DatenTyp übernehmen
Declare DESTRUCTOR()
DECLARE FUNCTION AddElement(index As Integer) AS Integer Ptr
Declare Function DeleteElement(index As Integer) As Integer Ptr
Declare Function ChangeElement(index As Integer ) As Integer Ptr
Declare Function ResetList() As Byte
Declare Function NextElement() As Integer Ptr
Private:
lstsze As UInteger
Lstcnt As UInteger
lstsel As UInteger
lstseladr As Integer Ptr
lstroot As Integer Ptr
lstend As Integer Ptr
End Type
|
Lässt sich so schon mal compilieren!
Habe noch eine andere 'Möglichkeit' gefunden mit TypeOf()
Olaf _________________ IF A=B AND B=C THEN IF A=C THEN PRG IS RUNNING
ELSEIF A NOT C THEN REALLIVE IS RUNNING
ENDIF |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1211 Wohnort: Ruhrpott
|
Verfasst am: 01.08.2020, 18:12 Titel: |
|
|
Zitat: | Code: | Type typdef ' Type der ein 'Dumy as TypeBeispiel' Ptr aufnimt
mtyp As Integer Ptr
End Type |
| Das ist schon mal falsch. Richtig müsste es heissen: Code: | Type typdef ' Type der ein 'Dumy as TypeBeispiel' Ptr aufnimt
mtyp As punkt Ptr
End Type |
Die Pointerarithmetik von FB ist etwas eigenwillig. Code: | Type punkt ' TypeBeispiel der gebraucht wird
x As Integer
y As Integer
End Type
Dim p As punkt
Print @p
Print @p + 1
Sleep | Du siehst, zum Pointer wird nicht 1 addiert, sondern die Anzahl der Bytes, die der UDT belegt, und du kommst in Teufels Küche, wenn du das einfach ignorierst. Und ja, diese Eigenart hat das Potenzial, einen Programmierer in den Wahnsinn zu treiben.
Ich würde immer noch das Überladen empfehlen, das ist am übersichtlichsten. Die Prozedur, an die du den UDT übergibst, muß ja sowieso einen Code enthalten, der eben diesen Typ von UDT adäquat verarbeitet.
Oder hast du vor, eine verkettete Liste zu erstellen, eventuell mit unterschiedlichen TYPEs?
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
OEG
Anmeldungsdatum: 01.08.2020 Beiträge: 8 Wohnort: Séte / France
|
Verfasst am: 01.08.2020, 20:03 Titel: |
|
|
Zitat: | Oder hast du vor, eine verkettete Liste zu erstellen, eventuell mit unterschiedlichen TYPEs?
Gruß
grindstone |
BINGO!!
Weil Selber Machen Macht Schlau!!
Naja,Villeicht,mit ein wenig Hilfe
Type typdef ' Type der ein 'Dumy as TypeBeispiel' Ptr aufnimt
mtyp As punkt Ptr
End Type
Und genau DA!! ist das Problem!!
wenn ich einen "punkt ptr" nehme,also für jede Variable den Type ändern muss,dann kann ich auch die 'Class'
jedesmal modifizieren!
Dann ist es nicht mehr 'Universel'.
: Eigenartig,dass es Ohne 'Classe', also Procedural mit Globals kein Problem ist,und eine 'Classe' jetzt....
Ich will doch nur den Type in die Classe oder so
Olaf _________________ IF A=B AND B=C THEN IF A=C THEN PRG IS RUNNING
ELSEIF A NOT C THEN REALLIVE IS RUNNING
ENDIF |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4597 Wohnort: ~/
|
Verfasst am: 01.08.2020, 21:19 Titel: |
|
|
Für eine Liste mit erweiterbaren Typen denke ich, ein allgemeiner Listentyp, von dem jeder einzubindende Typ erben muss, wird das praktischste sein. In anderen Sprachen würde man das über Interfaces machen - FreeBASIC kennt weder Interfaces noch Mehrfachvererbung, von daher ist man etwas eingeschränkt. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1211 Wohnort: Ruhrpott
|
Verfasst am: 01.08.2020, 22:13 Titel: |
|
|
Das Problem ist, daß der Compiler, um auf Elemente eines TYPEs zugreifen zu können, wissen MUSS, um welchen Datentyp es sich handelt. Das wird sich auch mit Vererbung nicht umgehen lassen.
Da der Pointer selbst immer dieselbe Größe hat, könnte man mit ANY Pointern arbeiten, die man dann jeweils entsprechend castet. Das ist aber -vorsichtig ausgedrückt- etwas umständlich. Hier mal ein rudimentäres (mir fallen langsam die Augen zu ) Beispiel, um das Prinzip zu verdeutlichen: Code: | Type tListeTyp1
As Byte id = 1
As Any Ptr parent
As Any Ptr child
As Integer level
Declare Property childID As Integer
End Type
Property tListeTyp1.childID As Integer
If this.child = 0 Then
Return 0
EndIf
Return *Cast(Byte Ptr, this.child)
End Property
Type tListeTyp2
As Byte id = 2
As Any Ptr parent
As Any Ptr child
As Integer level
As Double wert2
End Type
Type tListeTyp3
As Byte id = 3
As Any Ptr parent
As Any Ptr child
As Integer level
As Double wert2
As String text
End Type
Function erstelleTyp(elementTyp As Integer, par As Any Ptr) As Any Ptr
Dim As Any Ptr p
Select Case elementTyp
Case 1
p = New tListeTyp1
Cast(tListeTyp1 Ptr, p)->parent = par
Case 2
p = New tListeTyp2
Cast(tListeTyp2 Ptr, p)->parent = par
Case 3
p = New tListeTyp3
Cast(tListeTyp3 Ptr, p)->parent = par
End Select
*Cast(Byte Ptr, p) = elementTyp
Return p
End Function
Dim As Any Ptr root = New tListeTyp1
Dim As Any Ptr element
element = root
? *Cast(Byte Ptr, element) 'typ - ID des elements
? Cast(tListeTyp1 Ptr, element)->childID 'typ - ID des kindelements (0 = kein kindelement vorhanden)
?
Cast(tListeTyp1 Ptr, element)->child = erstelleTyp(2, element) 'kindelement vom typ 2 erstellen
? Cast(tListeTyp1 Ptr, element)->childID 'typ - ID des kindelements
Sleep |
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4597 Wohnort: ~/
|
Verfasst am: 01.08.2020, 23:29 Titel: |
|
|
Du kannst an eine Prozedur immer auch den Elterntyp übergeben - solange du nicht auf die Members zugreifst, die nicht zum Elterntyp gehören, ist das dem Compiler egal (und sonst musst du halt entsprechend CASTen). Für die Listenfunktionen sind die Nichtlisten-Members ja egal. Und um den Umgang mit den Listenfunktionen scheint es ja zu gehen.
Code: | TYPE ListPoint
AS ListPoint PTR ltnext
DECLARE SUB addElement(element AS ListPoint PTR)
END TYPE
SUB ListPoint.addElement(element AS ListPoint PTR)
DIM AS ListPoint PTR lp = @THIS
DO WHILE lp->ltnext <> 0
lp = lp->ltnext
LOOP
lp->ltnext = element
END SUB
TYPE myType EXTENDS ListPoint
AS INTEGER value
DECLARE CONSTRUCTOR(v AS INTEGER)
END TYPE
CONSTRUCTOR myType(v AS INTEGER)
value = v
END CONSTRUCTOR
DIM AS myType PTR a = NEW myType(7)
a->addElement(NEW myType(4))
PRINT a->value
PRINT CAST(myType PTR, a->ltnext)->value |
Gegebenfalls könnte man speziell eine Funktion getElement für jedes Kind von ListPoint überladen, um gleich an den richtigen Typen zu kommen. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
OEG
Anmeldungsdatum: 01.08.2020 Beiträge: 8 Wohnort: Séte / France
|
Verfasst am: 02.08.2020, 00:32 Titel: |
|
|
Damit ist mir sehr geholfen!!
Ich hab mich bereits anderweitig umgesehen, und bin bei 'C' (C von A bis Z) auf eine ähnliche Lösung gestossen.
C is zwar nicht wirklich meine Sprache,doch nahe genug dran an Basic,so dass ich so Ganz langsam die
"PointerLogik in FB verstehe.Ist sowieso noch etwas,nun, gewöhnungbedürftig, wie FB Variablen declariert
so mit 'as' und dann ein compilorFehler nach dem anderen.....
Nun gut werd das erst mal mit meinem C-Geborgtem vergleichen und dann sehen,wie das ganze schlussendlich
verpackt wird( Include, Type<Class>,Oder eineDLL )
Und Nun
Gute Nacht
Olaf _________________ IF A=B AND B=C THEN IF A=C THEN PRG IS RUNNING
ELSEIF A NOT C THEN REALLIVE IS RUNNING
ENDIF |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1211 Wohnort: Ruhrpott
|
Verfasst am: 04.08.2020, 13:45 Titel: |
|
|
Das Erweitern per Vererbung funktioniert tatsächlich.
Kleiner Tip: Mit WITH kann man sich ggf. viel Casterei ersparen. Der gecastete Pointer muß dann allerdings dereferenziert werden. Code: | Type ListPoint
As ListPoint Ptr ltnext
Declare Sub addElement(element As ListPoint Ptr)
End Type
Sub ListPoint.addElement(element As ListPoint Ptr)
Dim As ListPoint Ptr lp = @This
Do While lp->ltnext <> 0
lp = lp->ltnext
Loop
lp->ltnext = element
End Sub
Type myType1 EXTENDS ListPoint
As Integer value
Declare Constructor(v As Integer)
End Type
Constructor myType1(v As Integer)
value = v
End Constructor
Type myType2 EXTENDS ListPoint
As String text
Declare Constructor(t As String)
End Type
Constructor myType2(t As String)
text = t
End Constructor
Dim As myType1 Ptr a = New myType1(7)
a->addElement(New myType1(4))
Print a->value
Print Cast(myType1 Ptr, a->ltnext)->value
Print *Cast(myType1 Ptr, a->ltnext).value
a->ltnext->addElement(New myType2("Hallo"))
With *Cast(myType1 Ptr, a->ltnext)
Print .value
End With
Print Cast(myType2 Ptr, a->ltnext->ltnext)->text
With *Cast(myType2 Ptr, a->ltnext->ltnext)
Print .text
End With
Sleep |
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
OEG
Anmeldungsdatum: 01.08.2020 Beiträge: 8 Wohnort: Séte / France
|
Verfasst am: 07.08.2020, 18:49 Titel: |
|
|
So-
Hallo,
habe einen RIESIGEN Fehler gefunden,der für ernsthafte Zweifel an
meinem Verstand sorgte!!
Mein Ürsprüngliches Problem bestand darin,dass ich einen Zeiger
auf eine Structure übergeben wollte,was aber nicht richtig funktionierte.
Daher dachte ich mir,dass evtl der Typ der Struct ausreichen könnte!
Nachdem ich nun die Vorschläge dieses Themas umgesetzt hatte,
waren immer noch einige "Zweifelhafte" Ergebnisse zu verzeichnen!!
Schlussendlich stellte ich fest,das ein Error 40 vorliegt!
der FBCompiler,den ich installiert hatte,ist ein 32-Bit Compiler,
ich habe aber eine 64-bit Zeiger-Arithmetric durchgeführt,
mit "natürlich" falchen Ergebnisse.
Nachdem ich den 64-bit Compiler nutze,stimmt alles wieder!
So- das Problem hat sich also damit erledigt.
Übrigens, die 'Linked-List' ist
a: ein Stack
b: ein Qeue(Warteschlane)
Vielen Dank an alle,die sich hier beteiligt haben.
Olaf _________________ IF A=B AND B=C THEN IF A=C THEN PRG IS RUNNING
ELSEIF A NOT C THEN REALLIVE IS RUNNING
ENDIF |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4597 Wohnort: ~/
|
Verfasst am: 07.08.2020, 19:39 Titel: |
|
|
OEG hat Folgendes geschrieben: | der FBCompiler,den ich installiert hatte,ist ein 32-Bit Compiler,
ich habe aber eine 64-bit Zeiger-Arithmetric durchgeführt |
Auch wenn ich diese Methode bisher noch nicht sehr häufig verwendet habe, könnte da ein SIZEOF(INTEGER) helfen, das den Wert immer passend zum System ausgibt.
(Das ist natürlich die Größe in Byte und nicht in Bit.) _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|