Pointer bzw. Speicheradressen addieren



  • Hallo liebe Gemeinde.

    Ich wollte heute ein Programm schreiben, das nicht nur zwei Zahlen addiert, sondern auch die dazugehörigen Speicheradressen addiert.

    Folgenden Programmcode habe ich aufgesetzt:

    #include <iostream>
    using namespace std;
    
    int main()
    {
    	float a;
    	float *pa = &a;
    	float b;
    	float *pb = &b;
    	float c;
    	float *pc = &c;
    
    	cout << "Geben Sie zwei Zahlen ein!\n";
    	cin  >> a >> b;
        cout << "Speicheradresse der Zahl " << a << " ist " << &a << " und der Zahl " << b << " ist " << &b << "\n";
    
    	c = a+b;
    	*pc = *pa + *pb;
    
    	cout << "c nach Addition der Zahlen " << a << " und " << b << " ist " << c << "\n";
    	cout << "Die Speicheradressen " << &a << " und " << &b << " sind nach Addition " << &c << "\n";
    
    	return 0;
    }
    

    Mal angenommen, ich gebe zweimal die 5 ein, bekomme ich folgendes als Ausgabe:

    Geben Sie zwei Zahlen ein!
    5
    5
    Speicheradressen der Zahl 5 ist 0041FB4C und der Zahl 5 ist 0041FB34
    c nach Addition der Zahlen 5 und 5 ist 10
    Die Speicheradressen  0041FB4C und 0041FB34 sind nach Addition 0041FB1C
    

    Nun zu meiner Frage...

    Stimmen denn die Werte der Speicheradressen??

    Danke für die Antworten im Voraus.

    Gruß Max



  • Ich bin mir nicht so sicher was du erwartest.
    Zeile 17 und Zeile 18 tun das Gleiche, daher gehe ich mal davon aus dass du das nicht wolltest.
    Die Speicheradresse von c bleibt gleich, egal welchen Wert du da rein schreibst. Deine Ausgabe ist auch leicht irreführend. Du gibst nicht die Speicheradresse der 5 sondern die Speicheradresse einer Variablen aus, die gerade 5 enthält, unabhängig davon was sie enthält. Eine Änderung des Wertes hat keine Änderung der Speicheradresse zur Folge.
    Nicht so richtig portabel, aber wahrscheinlich gehts trotzdem:

    Zeile 18: pc = ((float *)((long int)pa + (long int)pb));//*pc = *pa + *pb;
    

    Damit hast du die Speicheradressen addiert. Das ist etwas umständlich, weil das addieren von Speicheradressen nicht sinnvoll und eigentlich immer ein Fehler ist. pc zeigt nämlich jetzt ins Nirvana und ein *pc würde höchstwahrscheinlich zum Absturz führen.



  • Ok... So habe ich es noch nicht gesehen.

    Aber Dir vielen Dank für den Code. Er funktioniert.



  • Du wolltest sicherlich nicht die Adressen zweier Variablen addieren, sondern hast irgendetwas falsch verstanden.


Anmelden zum Antworten