integer ausgabe

Gast #2723524
Lesenswert?

1
#define def  (*((uint*)(0x0043)))
2
printf( "Inhalt des defines: %i  \n", def );
3
printf( "Inhalt des defines: %i  \n", *(uint*)def );


Hallo Leute,

ich habe wohl eine einfache Frage, trotzdem finde ich keine Lösung.
Ich versuche nur den Wert von def auszugeben. Leider kommt immer i als 
Ausgabe und ich verstehe nicht warum.
Könnt ihr mir Helfen.

Gruß

Gert
P.S.: das define so Sinn macht oder nicht, sei mal dahingestellt, ist 
eine Kundenvorgabe :-(
#2723562
Lesenswert?

Gert schrieb:
>
1
> #define def  (*((uint*)(0x0043)))
2
> printf( "Inhalt des defines: %d  \n", def );
3
> printf( "Inhalt des defines: %d  \n", *(uint*)def );
4
>
>
> diese beiden ausgaben sind unterschiedlich

Was heißt 'unterschiedlich'


Gert. bitte bedenke bei all deinen Antworten: Wir können nicht über 
deine Schulter sehen. Wir sehen und müssen aus dem unsere Schlüsse 
ziehen, was du uns schreibst. Alles was du nicht schreibst, kann auf 
dieser Seite des Monitors keiner wissen! Daher: Wenn du ein Posting 
fertig hast, dann stell dich dumm, lies es noch mal und frag dich: hab 
ich alle Informationen gegeben, gibt es etwas, das zwei- oder mehrdeutig 
ist? Kann man das was ich geschrieben habe auch anders auffassen?
#2723591
Lesenswert?

Eine Analogie.
Das Setup ist -
  da gibt es eine Reihe von Briefkästen. Jeder trägt eine Nummer.
  In den Briefkästen liegt jeweils ein Zettel und auf diesem Zettel
  steht seinerseits wieder eine Nummer

Nummer des BK      0   1   2   3   4   5   6
                 +---+---+---+---+---+---+---+
                 | 5 | 3 | 1 | 6 | 0 | 2 | 4 |
                 +---+---+---+---+---+---+---+

Jetzt hast du die Nummer eines Briefkastens. Sagen wir 4

Diese Nummer kannst du ausgeben. Auf der Ausgabe steht daher: 4

Du kannst dir aber auch den Zettel im Briefkasten ansehen. Auf dem steht 
ja ebenfalls eine Nummer. Du dereferenzierst die 'Adresse': *4
Und als Ergebnis erhältst du: 0
gibst du also *4 aus, so lautet die Ausgabe: 0

Du kannst auch noch weiter gehen. Du kannst diese 0, die du durch *4 
erhalten hast, seinerseits wieder als die Nummer eines Briefkastens 
auffassen lassen, und dir den Zettel ansehen der dort (im Kasten 0) 
liegt. Du dereferenzierst also 2 mal **4. Lässt du dir das Ergebnis 
davon ausgeben, dann steht auf der Ausgabe: 5

Natürlich kann man dieses Spielchen jetzt weiter treiben. Auch die 5 
(die man durch **4 erhalten hat) kann man wieder als die Nummer eines 
Briefkastens auffassen lassen und nachsehen, was auf dem Zettel dort 
drinnen steht. Also kommt noch ein * davor: ***4
Lässt man sich ***4 ausgeben, dann lautet die Ausgabe: 2

****4     wird dann zu 1
*****4    erzeugt die Ausgabe 3
******4   zaubert auf die Ausgabe eine 6
.....

mit jedem * mehr, wird die Kette des 'Nachsehens was auf dem Zettel im 
Briefkasten mit der Nummer n steht' um 1 länger.
Gast #2723599
Lesenswert?

>Karl Heinz Buchegger, gib's doch zu, Du hast diese sehr guten Beiträge
>schon fertig verfasst auf Deiner Festplatte liegen! :-)))

.. zusammen mit einem Script, welches automatisch hier postet ;-)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren