Integeradresse in Integer abspeichern

[Wook] Müll

Cadet
Mitglied seit
01.10.2003
Beiträge
21
Renomée
0
Hallo,
folgendes Problem:

Ich muss eine Adresse eines Integers z.B. 000C in einen Integer abspeichern. Wie geht das?
Beispiel:

int i = 23;
int j = Der Wert der Adresse von i;
d.h. :
j hat dann den Wert 000C.

Gibt es da vielleicht fertige Methoden?

Vielen Dank für die Hilfe.
Müll
 
der addressoberator in c++ ist &;

bsp:
Code:
int a; // das programm legt platz für einen integer in speicher an 

int* p = &a; // int* p ist ein pointer auf ein int und enthält die adresse von a; zeigt also auf a.


wenn du also schreiben würdest
Code:
int i = 23;
int j = &i;
dann würde j nun die adresse von i enthalten; (da j aber kein pointer ist kannst du nun nicht duch manipulieren von j entwas an i ändern
 
Zuletzt bearbeitet:
wenn Du zukünftig etwas mehr mit C arbeiten willst, würde ich Dir dringens den Umgang mit Pointern allgemein ans herzen legen, sonst kommst Du noch in Teufels Küche ;)


Der Adressoperator ist korrekterweise das '&' und die "Umkehrfunktion ist dann das ' * ' (Stern)

int i = 5:
int *j = &i // j ist als Pointer deklariert und zeigt auf die Adresse von i


jetzt kommt das "witzige"


*j = 10


nun hat i den Wert 10 bekommen und der Pointer j zeigt immernoch auf die selbe Adresse ....
 
Äh. Das Problem sind nicht die Zeiger... Das sit schon klar. Nein das Problem ist die Adresse in dem Integer abzuspeichern. int i = &j geht nämlich nicht, da ja wir gesagt i kein zeiger ist also.... wie Speicher ich die Adresse nun ab. Nicht das nachher aus
int u = 000C; u = C wird. Das Problem hier sind nämlich die Nullen. Da die Adresse von C++ nach Java geht und zurück muss das schon komplett sein.
 
Hmm??? Führende Nullen kann man doch weglassen?! Sag jetzt nicht, bei Java sind die wichtig. *chatt*
 
Du musst den Pointer noch zum Integer casten, etwa so:

Code:
int a=1234;
int b=(int) &a;

Das mit den führenden 0en musst du mir jetzt mal erklären.
 
Zuletzt bearbeitet:
Die Nullen mitzuspeichern macht keinen Sinn und wäre auch nicht möglich, denn 001 = 1 für Integer.

Da du jedoch weißt wie groß die Adresse ist (nämlich stets 32bit) kannst du die Nullen ja später in Java dazudenken.
Falls es dir leichter erscheint das Ganze mit Nullen zu übergeben, dann bleibt dir wohl nichts anderes übrig als die Adresse als String zu übergeben.
Hier ein Beispiel wie es gehen kann:
Code:
#include <iostream>
#include <sstream>

int main()
{	
	int x = 123;
	int *xp = &x;
	
	std::stringstream ss;
	ss << xp;	
	
	std::cout << x << std::endl
 		       << ss;
	return 0;
}

Hoffe das hilft.
 
Zuletzt bearbeitet:
lol Pointer in nen Int reinpacken, siehe mal zu, dass du da mal nicht auf die Fresse fliegst, die beiden sind nämlich gerne verschieden lang, z.B. i8085: int = 8 bit, Adresse = 16 bit, AMD64: int = 32 bit, Adresse = 64 bit.

Und führende Nullen können schon mal wichtig werden,
int i = 1234;
und
int i = 01234;
ergeben verschiedene Werte für i ;)
 
lol Pointer in nen Int reinpacken, siehe mal zu, dass du da mal nicht auf die Fresse fliegst, die beiden sind nämlich gerne verschieden lang, z.B. i8085: int = 8 bit, Adresse = 16 bit, AMD64: int = 32 bit, Adresse = 64 bit.

Und führende Nullen können schon mal wichtig werden,
int i = 1234;
und
int i = 01234;
ergeben verschiedene Werte für i ;)

1. ist er sicher nur auf i386 unterwegs, und 2. haben führende 0en keinen Einfluss! 012345 ist das selbe wie 12345.
 
Ja, aber es ist extrem schlechter Stil, so unportabel zu schreiben. Wir sind hier schließlich nicht bei Microsoft. ;D
Auch das Windows SDK von Microsoft kennt spezielle Typen für Pointer, um bei sowas nicht auf die Fresse zu fliegen und der Compiler von MS spuckt auch fleißig Warnungen aus, wenn man versucht einen Pointer in einen int zu quetschen.;)
Aber ja, es ist schlechter Stil.
 
Auch das Windows SDK von Microsoft kennt spezielle Typen für Pointer, um bei sowas nicht auf die Fresse zu fliegen und der Compiler von MS spuckt auch fleißig Warnungen aus, wenn man versucht einen Pointer in einen int zu quetschen.;)
Aber ja, es ist schlechter Stil.

Mittlerweile müssen sie ja auch (wieder) unterschiedliche Architekturen unterstützen, die ihre verschiedenen Eigenheiten haben. Aber die späte Unterstützung von AMD64 lag ja nicht zuletzt an der unsauberen Programmierung. So lange man sich immer nur auf x86 bewegt hatte, tat das nicht sonderlich weh. Nach dem Entschluss auch andere Architekturen (IA64, AMD64) zu unterstützen, ist da wohl so manche Codestelle böse aufgestoßen. Passiert übrigens auch auf Linux immer wieder so manchen "Hobbyprogrammierern", welche sich normalerweise nur auf x86 aufhalten. Ich denke da nur an Reiser4. :]
 
Zurück
Oben Unten