Zeigerarithmetik // nachfolgende Bytes im Speicher auslesen



  • Hallo,
    ich habe beim Thema Zeiger ein kleines Verständnisproblem, bzw. verstehen tue ich es an sich ja aber, mir fällt zur gegeben Aufgabe keine passende Lösung ein.

    Die Aufgabe ist das ich von einer Int-Variablen, die vorher Ihren Inhalt per Eingabedialog zugewiesen bekommt, die einzelnen Speicherbytes im Speicher hintereinander ausgeben soll und den jeweiligen Inhalt.

    So erster Fakt, Int hat bei mir aufm Rechner eine Belegung im Speicher von 4 Bytes. Die Bytes an sich habe ich auch schon hinbekommen auszugeben.

    Was ich bisher nicht schaffe ist aber nur die jeweiligen Inhalte der einzelnen Speicherbytes auszugeben

    #define ANZAHL sizeof(int)
    
    int iValue, i, *iPValue;
    
    iPValue = &iValue;
     :
     :
    printf("\n"
    		"Adresse : ");
    for (i = 0; i < ANZAHL; i++)   //erster Lauf um die einzelnen Speicheradressen auszugeben
    	{
    		printf("%10p", (char*)iPValue + i);
    	}
    
    printf("\n"
    		"Inhalt  : ");
    for (i = 0; i < ANZAHL; i++)   //zweiter Lauf um die einzelnen Inhalte der Adressen auszulesen
    	{
    		printf("%10X", *((char*)iPValue + i));
    	}
    

    Die Idee dahinter ist, wenn ich nur meinen Zeiger um 1 erhöre ich damit ja gleich um alle 4 Bytes springe, ergo sag ich ihm über die explizite Typenumwandlung du bist jetzt ein Zeiger der auf ein Char zeigt um somit wirklich nur um ein Byte weiter zu gehen.

    Bei der zweiten Schleife im Prinzip das selbe nur das ich per Verweisoperator jetzt den Inhalt ausgeben möchte und genau da ist der Hacken. Bei manchen Zahlen kommen irgendwelche Wirren werte raus. (B.s. die 128 bei dem im ersten Byte ein "Inhalt" von FFFFFF80 sein soll und die restlichen Bytes leer sind.
    Alle Zahlen kleiner als 128 bis 0 funktionieren ohne Probleme)

    Abgesehen davon weiß ich jetzt nicht mal ob es richtig rum ausgeben wird, da mir noch so im Hinterkopf schwirrt, dass ein Funktionsstack rückwärts zugeordnet wird und anschließend wieder vorwärts ausgegeben wird.
    Es ist eine reine Lernaufgabe.



  • Easy_byWay schrieb:

    Zeiger ein kleines Verständnisproblem, bzw. verstehen tue ich es an sich ja aber,

    Nein.
    Kein Anfänger versteht Zeiger.
    90% aller Fachbuchautoren,IT-Lehrer und sich selbst als Fortgeschrittenen oder Profi bezeichnenden verstehen Zeiger nicht.
    So auch du.

    int main(void) {
    enum{ANZAHL=sizeof(int)};
    int i, iValue = 0x44556677;
    const void *v = &iValue;
    const char *c = v;
    
    for (i = 0; i < ANZAHL; i++) 
        {
            printf("%p\n", (void*)(c+i));
        }
    
    for (i = 0; i < ANZAHL; i++)
        {
            printf("%02x\n", c[i]);
        }
    	return 0;
    }
    

    http://ideone.com/bhH0Oh



  • Lies dich mal über Zweierkomplement schlau.

    Dann kannst du dir überlegen, wie die 128 bei 8-Bit mit Vorzeichen aussieht.
    Das Gleiche nochmal für -128 und wie -128 bei 32-Bit aussieht.


Anmelden zum Antworten