pointer als integer intepretieren - integer als pointer interpretieren
-
kann man da nicht einfach...
int *ptr = 0x2300000;müsste gehn.
-
Nein geht nicht.
-
zum parsen:
War vielleicht ein missverständlicher Ausdruck: Manchmal muss ich einen spezifischen Satz von Objekten löschen. Ich wollte Pointer auf diese als integers in einer kleinen Liste storen; Später muss ich diese ja dann in meiner globalen Liste ausfindig machen. Ich nenne den Vorgang des Findens halt parsen bei ner Liste. Ist wahrscheinlich falsch, also sagt mir bitte den richtigen Begriff.void* will ich vermeiden, weil ich früher schon einmal Probleme damit hatte. In diesem Kontext dürfte es zwar keine Probleme machen, dennoch ist mir void* nicht ganz geheuer. Ich hatte gehofft man kann anhand der Addresse des Speicherbereichs den Datentyp ausfindig machen, was ja anscheinend nicht funktioniert. Wenn doch würde mich interessieren wie man sowas macht.
-
Wenn dir void nicht geheuer ist, dann sollte dir int noch viel ungeheurer sein. Jedenfalls solange du auf dieser Ebene des Aberglaubens an die Programmierung herangehst. Besser wär es natürlich, du könntest eine informierte Entscheidung treffen.
Jeder Pointer auf ein Objekt (dh alles ausser Funktionspointer, Memberpointer auch nicht) kann implizit in einen void-Pointer umgewandelt werden. Die Rückumwandlung muss mittels eines Cast-Operators vorgenommen werden (static_cast). Dabei ist garantiert, dass derselbe Pointer wieder herauskommt, wenn der Ausgangs- und der Zieltyp übereinstimmen.
Schwierigkeiten kann es dabei nur geben, wenn du auf letzteres nicht aufpasst. Zuerst einen int* nach void* und dann zurück nach double* geht natürlich schief.Im Vergleich dazu ist zum ersten nicht garantiert, dass alle Pointer ohne Informationsverlust in einen int passen. Zum anderen musst du dann sowohl in der Hin- als auch Rückrichtung reinterpret_cast verwenden. Vorteil gegenüber void*: Keiner.
-
Warum willst Du die Pointer auf Deine Objekte als integer in der Liste speichern? Warum nicht gleich die Pointer speichern? Und wenn Du ne Liste brauchst, dann benutze die STL. Dann brauchst Du nicht alles selber schreiben und die ist auch noch unabhängig vom Datentyp.
-
Und wieso soll void* an dieser Stelle Probleme machen? Und wieso soll int besser geeignet sein einen Pointer zu speichern? Ich empfehle dir ein gutes Buch/Tutorial zu dem Thema zu lesen.
-
thx, werd mich schon durchschlagen Mr.Bashar!
-
Da war ich wohl knapp zu spät dran!
Also, da hier void* sogar empfohlen wird (mehr oder weniger), werd ichs wohl oder übel benutzen.
Danke trotzdem für alle Hilfestellung
-
@ShirKahn
Du willst also ne Art Garbage Collector schreiben ... also wo man Objecte erzeugt, und die dann bei Nichtmehrgebrauchen loescht. Wenns geht noch einfach Loeschflag setzen, und wenn die CPU mal zeit hat, loescht sie dann wirklich ... oder so aehnlich ?
Weiss ned recht, ob das nen guter anfang fuer nen Einstieg ist.
Was aus deiner Fragestellung auch nicht hervorgeht, die Objecte die du loeschen willst, sind die vom gleichen typ oder aus ner AbleitungsHirarchie oder total wahlfrei ? :p
Wenn letzteres (denk ich mal, weil sonst fragst ned nach ner rueckwandlung von int zu pointer auf Klasse), dann viel spass !!! Weil zum loeschen vom Objekten braucht man nen typisierten Pointer, oder zumindest Basisklassenpointer und nen virtuellen Destruktor.
Ich persoenlich find GC's manchmal praktisch, unter c++ verwende ich sie eigentlich nie ...
Alternativen zu sind Smartpointer mit refZaehlung, oder normale typisierte container.Aber lass dich ned vom Ziel abbringen ...
Ciao ...
-
[quote="RHBaum"]Ich persoenlich find GC's manchmal praktisch, unter c++ verwende ich sie eigentlich nie ... /quote]
"eigentlich"? Was für GCs benutzt du denn manchmal?
-
Aber hallo, kann man von Pointertyp zu Pointertyp umwandeln!
Ein Pointer ist eine 32Bit-Zahl, die eine Stelle im Speicher ausgehend von einem Descriptor meint. Datenverlust kann es beim Umwandeln gar nicht geben!
Wenn also der Descriptor die Adresse 10 beschreibt, zeigt der Pointer auf die Adresse Pointer+10, um es salopp auszudrücken.
Die interpretation der Daten an den Folgeadresse liegt beim Programmierer!
Dass uns die meisten Programmiersprachen einen Teil dieser Interpretationsarbeit abnehmen, ist eine ganz andere Geschichte.
__
Grüße, DennisB
-
DennisB schrieb:
Aber hallo, kann man von Pointertyp zu Pointertyp umwandeln!
Ein Pointer ist eine 32Bit-Zahl, die eine Stelle im Speicher ausgehend von einem Descriptor meint. Datenverlust kann es beim Umwandeln gar nicht geben!
Wenn also der Descriptor die Adresse 10 beschreibt, zeigt der Pointer auf die Adresse Pointer+10, um es salopp auszudrücken.
Die interpretation der Daten an den Folgeadresse liegt beim Programmierer!
Dass uns die meisten Programmiersprachen einen Teil dieser Interpretationsarbeit abnehmen, ist eine ganz andere Geschichte.
__
Grüße, DennisBAch, du kannst für jede Architektur sagen, was ein Pointer genau ist? Herzlichen Glückwunsch. Wie groß ist noch mal ein Pointer auf z/OS?
-
Ok, erwischt, doofe Formulierung: Ich verwende Sie nie, und man braucht sie eigentlich auch nicht !
( unter C++ !!! )
Nen Typfreien GC wird es ja sicher so auch ned geben ... Mit der Hirachie der MFC(CObject) liese sich sicher sowas bauen. Der Nutzen ist ne andere Geschichte.
Ich bezweifle aber nicht, das irgendwer schon sowas implementiert hat ...Ciao ...
-
DennisB schrieb:
Ein Pointer ist eine 32Bit-Zahl
Chapter&Verse?
Mal im Ernst, solche Denkweisen sind mit Schuld daran, dass Linuxriba schon lange 64Bit kann, während Windowbajo damit nicht in die Pötte kommt.