Pointer



  • Das müsste funktionieren. Es sei denn, ich übersehe im Moment etwas.

    Hatte einen kleinen Tippfehler.

    ist nicht unbedingt sinnvoll. Trotzdem denke ich, du hast das Prinzip verstanden. Nur muss man das doch nicht alles auswendig lernen oO

    Naja, ich lern es auch nicht auswendig sondern versuche zu verstehen was in welchem Fall passiert.

    Ändere ich hier die Adresse von variable oder würde das auch nicht funktioneren da &variable und int *zahl stehen muss.

    void set(int zahl)
    {
    zahl = 10;
    }
    
    int main()
    {
    int variable = 5;
    set(&variable);
    }
    

    Inwieweit unterscheiden sich diese zwei.

    Hier erzeuge ich einen Pointer und die Adresse vom Pointer setze ich auf 10.

    int *var;
    var = 10;
    
    int *var;
    var = (int*)10;
    


  • Pointi schrieb:

    Hatte einen kleinen Tippfehler.

    I'm da Hellseear 😃

    Pointi schrieb:

    Ändere ich hier die Adresse von variable oder würde das auch nicht funktioneren da &variable und int *zahl stehen muss.

    void set(int zahl)
    {
    zahl = 10;
    }
    
    int main()
    {
    int variable = 5;
    set(&variable);
    }
    

    Wenn die Funktion aufgerufen wird, ist zahl = &variable. Dann setzt du zahl = 10. Macht aber halt keinen Sinn 😃

    Pointi schrieb:

    Inwieweit unterscheiden sich diese zwei.

    Es ist sehr unüblich Pointern einfach "irgendwelche" Werte zuzuweisen. (z.B. 10). Deshalb wird ein guter Compiler hier warnen, es sei denn du "castest" den Wert 10 in den Typ int*, damit sagst du dem Compiler quasi "ich weiß was ich hier mache!".



  • Pointi schrieb:

    Ändere ich hier die Adresse von variable oder würde das auch nicht funktioneren da &variable und int *zahl stehen muss.

    Das Funktioniert nicht, da hab ich in meinem letzen Post was zu geschrieben.

    Pointi schrieb:

    Inwieweit unterscheiden sich diese zwei.

    Hier erzeuge ich einen Pointer und die Adresse vom Pointer setze ich auf 10.

    Bei dem zweiten Beispiel ist noch ein Cast dabei, der dem Compiler sagen soll, dass die Zahl als Adresse interpretiert werden soll. Die erste Möglichkeit dürfte eigentlich nicht kompiliert werden.

    Edit: Ich sags nochmal: Normalerweise muss man den den Zeigern keine bestimmten Adressen "manuell" zuweisen. Das kann mal vorkommen, wenn man Treiber o.ä. progrmmiert. Normalweise ändert man die Adressen wenn überhaupt so:

    int a,b;
    int *ptr;
    
    a=10;
    ptr = &a;
    *ptr = 5; // a ist jetzt 5
    ptr = &b;
    *ptr = 5; // b ist jetzt auch 5
    int* ptr2 = ptr; // ptr2 zeigt jetzt auch auf b
    


  • Müsste jetzt klarer sein. Danke!


Anmelden zum Antworten