Zeiger



  • Hey Leute ist jezt nicht die schlauste frage vermutlich.
    Also ich habe verstanden das Zeiger auf etwas auf die adresse einer variablen/funktion und was sonst so im RAM rumschwirt zeigen. Jedoch weiß ich nicht wozu die genau gut sind die entwickler werden sich bestimmt schon was dabei gedacht haben, und ich würde jezt gern wissen was.



  • manchmal möchte man z.b. einen speicherbereich oder eine datenstruktur in einer funktion bearbeiten und dazu übergibt man dann den zeiger bzw. die adresse.



  • Genau, wenn du zum Besenstiel in den Speicher Deines Programms reingrätschen willst. Buzzwords: Hardware access, Events, Modifikation, Manipulation, Hooking...



  • z.b. bei mikrocontrollern kannst du damit auch direkt auf die register zugreifen und z.b. interruptvektoren setzen, speicherwerte auslesen usw. aber unter windows und linux beschränkt sich der gebrauch von zeigern eben auf die manipulation von datenstrukturen oder speicherbereichen.


  • Mod

    Das ist viel elementarer: Die Möglichkeit, auf andere Dinge Bezug zu nehmen, ist Grundvoraussetzung, um überhaupt irgendwelche komplexen Strukturen aufzubauen.



  • Gut leute schonmal danke für euere konstruktiven antworten.
    ist aufjedenfall ein grund sich weiter damit zu beschäftigen.



  • @Abe sagte in Zeiger:

    ist aufjedenfall ein grund sich weiter damit zu beschäftigen

    Wenn man muss, dann "ja". 😉



  • @EinNutzer0 sagte in Zeiger:

    weiter damit zu bes
    bedenke man muss garnix 😃

    ich wollte eigentlich früher antworten nur habe ich gerade visual studio installiert und das lässt mich nicht so viele "Fehler machen" also @Wade1234

    void MyZeugs::change(int * c)
    {
    
    	int b = 100;
    	*c = b;
    }
    int x = 12;
    	int* zahl = &x;
    	MyZeugs h;
    	h.change(zahl);
    

    und ich finde das hört sich ja schon praktisch an zumindest wenn man hardware nah programmiert find ich schon interessant



  • @Abe Bitte keine Zitate verfälschen. Danke.



  • @Abe Was Du da zeigst ist viel eher ein Einsatzbereich für Referenzen anstatt für Zeiger. Zeiger würde man da nur nehmen, wenn der Parameter optional ist, also auch nullptr sein kann.

    Aber um Dich vom "Zeiger braucht man für Hardware"-Trip wegzubringen: Schreibe eine verkettete Liste ohne Zeiger.



  • @Abe sagte in Zeiger:

    void MyZeugs::change(int * c)
    {
    
    	int b = 100;
    	*c = b;
    }
    int x = 12;
    	int* zahl = &x;
    	MyZeugs h;
    	h.change(zahl);
    

    und ich finde das hört sich ja schon praktisch an zumindest wenn man hardware nah programmiert find ich schon interessant

    Hier wäre eine Referenz besser gewesen.

    void MyZeugs::change(int&  c) ...
    
    h.change(x);
    

    In deinem Code müsstest du auf Nullpointer prüfen.



  • Ja gut und was wäre dann ein guts beispiel für Den einsatz von Zeigern ?



  • @Abe sagte in Zeiger:

    Ja gut und was wäre dann ein guts beispiel für Den einsatz von Zeigern ?

    @Swordfish sagte in Zeiger:

    Schreibe eine verkettete Liste ohne Zeiger.



  • @manni66 sagte in Zeiger:

    Schreibe eine verkettete Liste ohne Zeiger.

    Ich muss erstmal schaun was damit gemeint ist


  • Mod

    @Abe sagte in Zeiger:

    @manni66 sagte in Zeiger:

    Schreibe eine verkettete Liste ohne Zeiger.

    Ich muss erstmal schaun was damit gemeint ist

    Das ist ein einfaches Beispiel zu dem, was ich oben mit

    @SeppJ sagte in Zeiger:

    Das ist viel elementarer: Die Möglichkeit, auf andere Dinge Bezug zu nehmen, ist Grundvoraussetzung, um überhaupt irgendwelche komplexen Strukturen aufzubauen.

    meinte. Zeiger sind ein Mittel zur Indirektion. Indirektion ist eine grundlegende Voraussetzung, um überhaupt irgendwie dynamische (d.h. zur Programmlaufzeit auf Ereignisse reagierend) Datenstrukturen aufbauen zu können. Man kann Indirektion auch anders erreichen, aber Zeiger sind ein gutes und gängiges Mittel dafür, weil sie direkte Unterstützung durch die Computerhardware haben (eben weil die Macher dieser Hardware wissen, dass sie solch einen Mechanismus brauchen). Eine tiefere Diskussion der Hintergründe ginge jetzt sehr in die theoretische Informatik. Da dir verkettete Listen nichts sagen, gehe ich davon aus, dass dir das sowieso nicht mehr bringen würde und spare es mir.



  • @SeppJ sagte in Zeiger:

    Man kann Indirektion auch anders erreichen, aber Zeiger sind ein gutes und gängiges Mittel dafür, weil sie direkte Unterstützung durch die Computerhardware haben (eben weil die Macher dieser Hardware wissen, dass sie solch einen Mechanismus brauchen). Eine tiefere Diskussion der Hintergründe ginge jetzt sehr in die theoretische Informatik.

    So aus neugierde, wie erreicht man Indirektion ohne Zeiger?
    Die einzige Idee die ich spontan habe, wäre den Speicher in einer Tabelle zu indizieren, und dann im Code bzw. im Prozessor mit den ensprechenden Indizes der Tabelle zu arbeiten. Das wäre aber auch nur eine umständliche Art und weise direkte Zeiger durch eine Indirektion auf eine Tabelle zu verschleiern.



  • @axels Im Prinzip garnicht. Egal wie es die konkrete Sprache nennt geht es auf Maschinenebene immer um einen Zahlenwert der als Speicheradresse interpretiert wird.


Log in to reply