Frage zu Zeiger in Funktion(int*)



  • @bthight sagte in Frage zu Zeiger in Funktion(int*):

    dass in der Funktion der Übergabeparameter ein Zeiger ist,

    in der Funktion ist es ein Zeiger.

    und nicht eine anderes lautende Variable, als Adresse eingegeben wird.

    Da hast du gleich den Adressoperator genutzt/kennen gelernt.

    Da du noch am Anfang bist, ist die einzige Möglichkeit eine gültige Adresse zu bekommen, die von einem vorhandenen Objekt (Variable) zu nehmen.


  • Mod

    Vergiss mal die Funktion, anderes ist hier viel wichtiger. Verstehst du folgenden Code komplett? Kannst du von jeder Zeile ohne zu zögern genau sagen, was sie warum macht? Ganz ehrlich? Denn das ist hier das was wichtig ist.

    #include <iostream>
    using namespace std;
    int main ()
    {
        int zahl1 = 5;
        cout << "Wert Zahl1 am Anfang: " << zahl1 << endl;
        cout << "Adresse zahl1 am Anfang: " << &zahl1 << endl;
    
        int* zahl2 = &zahl1;
        cout << "Wert Zahl2 am Anfang: " << zahl2 << endl;
        cout << "Adresse zahl2  am Anfang: " << &zahl2 << endl;
    
       *zahl2 *= 2;
        cout << "Wert Zahl1 am Ende: " << zahl1 << endl;
        cout << "Adresse zahl1  am Ende: " << &zahl1 << endl;
        // cout << "Wert Zahl2 am Ende: " << zahl2 << endl;
        // cout << "Adresse zahl2  am Ende: " << &zahl2 << endl;
    }
    

    Zweite Aufgabe: Kannst du vorhersagen, was die beiden auskommentierten Zeilen am Ende ausgeben würden, ohne es auszuprobieren?



  • @SeppJ sagte in Frage zu Zeiger in Funktion(int*):

    zahl2

    Also ohne es auszuprobieren würde ich folgenden Output an Zahlen erwarten:

    5
    0xirgendwas

    5
    0xirgendwas

    10 --> durch den Pointer von Zahl 2, auf die Adresse von 1, und der Multiplikation mit 2.

    Zahl 2, dort erwarte ich wieder 10, weil die Zahl zwei zeigt durch den Pointer direkt auf die Adresse von Zahl 1 und ändert den Wert um den Faktor 2.

    0xirgendwas

    Soweit zu meinem Logikverständnis. Ich hoffe ich blamiere mich nicht.


  • Mod

    Leider nicht. Du hast Zeiger nicht verstanden. Liegt vielleicht auch an der grausamen Namensgebung der Variablen aus deinem Beispiel (Siehe auch ganz dringend manni66s Ratschlag!). zahl2 ist nämlich keine Zahl. Es ist eine Wegbeschreibung, wo eine andere Zahl zu finden ist.



  • @SeppJ sagte in Frage zu Zeiger in Funktion(int*):

    Leider nicht. Du hast Zeiger nicht verstanden. Liegt vielleicht auch an der grausamen Namensgebung der Variablen aus deinem Beispiel (Siehe auch ganz dringend manni66s Ratschlag!). zahl2 ist nämlich keine Zahl. Es ist eine Wegbeschreibung, wo eine andere Zahl zu finden ist.

    Vielen lieben Dank für deine Mühen.
    Ich werde mir ein neues Buch zulegen müssen.



  • @bthight
    Bei int *zahl2; ist zahl2 ein Pointer und *zahl2 ein int (so wie in der Definition steht)
    Ein Pointer ist eine Variable, die eine Adresse von einem Objekt aufnimmt.

    Wenn du nur den Variablennamen angibst, bekommst du den Inhalt dieser Variablen (also die Adresse)
    Mit dem Dereferenzierungsoperator * bekommst du den Inhalt an dieser Adresse.
    Und da ein Pointer eine Variable ist, hat er auch selber einen Speicherplatz, den man mit dem Adressoperator & bekommen kann.

    Es spielt bei der Definition aber keine Rolle, wo der * steht.

    int *zahl2;
    int * zahl2;
    int* zahl2;
    

    Ist alles identisch zahl2 ist ein Pointer auf int

    Unübersichtlich wird es erst, wenn du mehrere Variablen definiierst

    int *zahl2, zahl1;
    int * zahl2, zahl1;
    int* zahl2, zahl1;
    

    Ist auch alles identisch zahl2 ist ein Pointer auf int und zahl1 ist ein int ( auch wenn Zeile 3 etwas anderes vorgaukelt)

    Wert Zahl1 am Anfang: 5 
    Adresse zahl1 am Anfang: 0x4711   (ausgedacht)
    Wert Zahl2 am Anfang:  0x4711     <-- Inhalt von zahl2 ist die Adresse von zahl1
    Adresse zahl2 am Anfang: 0x0815   <-- zahl2 hat eine eigene Adresse
    


  • Ungerade Adressen bei int-Zeigern? duck und weg...



  • @Th69 sagte in Frage zu Zeiger in Funktion(int*):

    Ungerade Adressen bei int-Zeigern? duck und weg...

    Auf einem 8-Bit System ....



  • @DirkB sagte in Frage zu Zeiger in Funktion(int*):

    @Th69 sagte in Frage zu Zeiger in Funktion(int*):

    Ungerade Adressen bei int-Zeigern? duck und weg...

    Auf einem 8-Bit System ....

    https://godbolt.org/z/ojToff 😉



  • @Th69 sagte in Frage zu Zeiger in Funktion(int*):

    Ungerade Adressen bei int-Zeigern? duck und weg...

    Das ging auch bei einem 68020 problemlos, aber nur für Peripherie.


Anmelden zum Antworten