Speicheradressen abzählen. (Pointer)

...komplette Frage anzeigen

2 Antworten

Deine Programmiersprache zu wissen wäre bei derartigen Fragen hilfreich. Ich gehe im Folgenden von C aus; in C++ funktioniert das sowieso genauso.

Der Speicher wird abgezählt, indem jedes Byte von 0 bis zum letzten Byte eine fortlaufende Nummer zugewiesen bekommt. Mit dieser kannst du dann genau die Speicherzelle ansprechen, die du gerade brauchst. Intern wird die Zahl natürlich im Binärsystem gespeichert; auf Programmierebene ist es aber egal, welches Zahlsystem du verwendest - der Compiler (oder gar erst der Assembler) übernehmen das Umrechnen für dich.

Zeiger sind in C normale Variablen. Sie werden genutzt, um Speicheradressen zu speichern, aber es sind, technisch gesehen, eben nur normale Variablen. Daher kannst du folgende Rechenoperation durchführen:

int *i = 0xA3B34329;
++i;

Dann zeigt i jetzt auf das Byte mit der Nummer 0xA3B34329. Das würde übrigens auch im Dezimalsystem funktionieren; das Hexadezimalsystem ist beim Programmieren aber oft hilfreicher.

Falls dein Compiler meckert, solltest du noch entsprechende Casts einfügen:

int *i = (int *) 0xA3B34329;
i = (int *) (((int) i) + 1);

Und außerdem musst du bedenken, dass eine Variable nicht immer ein Byte lang ist. Demnach musst du bei int-Variablen mit 4 Bytes Speicherbedarf rechnen, bei double mit 10 und bei short mit 2.

In Java arbeitet man nicht mit Pointern, sondern mit Referenzen. Pointer werden von Java zwar benutzt, aber intern. Da hat du nix mit zu tun.

Wenn du in Hexadezimal rechnen willst geht das so:

int a = 0xA3B34329;
int b = 0x1;

System.out.println(a + " + "+b+" = "+(a+b));

Wie du siehst, rechnen mit Hexadezimalzahlen funktioniert genauso wie mit Dezimalzahlen. Entscheidend ist nur, dass du die Variablen hexadezimal angibst. Das geht mit diesem "0x" davor. Du könntest auch "a+88" rechnen, also die Hexadezimalzahl + die dezimale 88 oder "a+0x88", das wäre dann die hexadezimale 88. Binär ists das gleiche. Dezimal/Hexadezimal ist nur eine Schreibweise für ein und die selbe Zahl.

Was möchtest Du wissen?