Warum Zeiger in C ???



  • Hallo Leute,

    habe mal eine Frage bezüglich Pointer in C.
    Wie man sie Verwendet, das Grundprinzip habe ich verstanden ( hoffe ich ).
    Aber warum nutzt man Pointer überhaupt? Ich habe keine richtige Erklärung gefunden... Ist es eine Frage das Speichers , der Geschwindigkeit ...?

    thx im vorraus



  • Diverse Datenstrukturen (Listen, Bäume etc. pp.) lassen sich bequem mit Zeigern realisieren. Große Datenstrukturen by-value an Funktionen zu übergeben ist nicht das Gelbe vom Ei, deshalb wieder Zeiger. Variablen, die länger als im aktuellen Scope leben sollen, müssen dynamisch per malloc() und einem Zeiger angelegt werden.



  • Pointers ermöglichen, was viele Sprache nicht können: Direkt auf den Speicher zugreifen.

    Manchmal gehen Sachen viel viel eindacher und schneller, wie bei Bäumen, Listen usw.

    Pointer sind nützlich, wenn eine Funktion mehr als einen Wert zurückgeben muss. Da das ohne Structs unmöglich ist, kann man mit Pointers direkt auf den Speicher einer Variable zugreifen und so von einer Funktion aus dessen Inhalt verändern.



  • jaja, die Zeigers



  • ssss schrieb:

    jaja, die Zeigers

    und was sollen wir mit diesem Kommentar machen? Was kann Mr.Black damit anfangen?



  • Danke erstmal...

    Mit dem Zugriff auf dem Speicher das ist klar ( also ein Zeitvorteil beim verändern der Daten ? )
    Kann man das vielleicht auch etwas praktisch am TCP Protocol erklären

    THX



  • Mr.Black schrieb:

    Kann man das vielleicht auch etwas praktisch am TCP Protocol erklären

    Nein, weil das nichts miteinander zu tun hat. Höchstens vielleicht der Urgent Pointer im TCP-Header. 😉



  • Servus!

    Ich werd meinen Senf auch noch dazu geben.

    Vektorn werden über ihre Anfangsadresse angesprochen und auch
    mittels dieser Anfangsadresse an Funktionen übergeben. Die An-
    fangsadresse eines Vektors steht fest, ist also eine Konstante. Im
    Gegensatz dazu ist ein Zeiger eine Variable, die die Adresse eines
    (beliebigen) anderen Objektes enthält. Man kann auf dieses Objekt
    indirekt über einen Zeiger zugreifen.

    MFG 🙂



  • @Mr Black

    eigentlich isses ganz einfach ....

    Zeiger brauchst du genau fuer 2 Sachen
    1. fuer dynamische Allocation von Speicher.
    Wenn du zur kompile Zeit ned weisst, wie gross dein Benotigter Speicher wird. Beispielsweisse du laesst den user selber angeben, wieviel Variablen er definieren moechte etc ... und speicherst ned alles gleich in ne Datei sondern haelst es komplett im Speicher, ohne auf Verdacht unsummen an Speicher zu allokieren .... -> dynamisch (malloc und Co)

    2. Ubergabe per "referenz"
    Du hasst Objecte err, Structs (wir sind ja in C 😃 ) und willst diese Dinge einer funktion uebergeben, aber das kopieren der Structur vermeiden. Ungluecklicherweisse kann C eigentlich nur kopieren .... Aber du kannst vorher nen pointer drauf referenzieren und den pointer kopieren lassen ...
    Genau so brauchst das, wenn du funktionen schreibst, die deine Parameter veraendern sollen, beispielsweise weil sie den rueckgabewert fuer Fehlercodes brauchen ... (normal arbeitet deine funktionn mit kopien, also schreibst du immer auf was temporaeres .... )

    mehr faellt mir eigentlich ned ein ....

    Ciao ...



  • RHBaum schrieb:

    mehr faellt mir eigentlich ned ein ....

    vielleicht noch die arithmetik.



  • wie wärs denn mal mit einem umfassenden Text zu Pointern für die FAQ ;), fällt mir grad so ein ;P



  • TheTester schrieb:

    wie wärs denn mal mit einem umfassenden Text zu Pointern für die FAQ ;), fällt mir grad so ein ;P

    Gibts sowas nocht nicht ? Ich dachte, dass die FAQ schon die meisten Themen beinhaltet, die die Programmierung betreffen.



  • Hi!

    Gibt es nur in der C++-FAQ. Hier der link falls es jemanden interessiert obwohl es hier um C geht:
    http://www.c-plusplus.net/forum/viewtopic.php?t=39497

    Zeiger braucht man, wie bereits gesagt, für dynamische Datenstrukturen, Speicherallokation und Referenzparameter. Felder und Zeiger sind in C sehr nah miteinander verwandt, außerdem kann man mit einem Zeiger über ein Feld (ohne Indexvariable) iterieren. Für mehrdimensionale Felder braucht man sie ebenfalls, da diese nicht kopiert werden können.
    Es gibt noch sehr viel mehr Anwendungen für die Zeiger praktisch sind. Z.B. kann man die Adresse des Standardeingabestrom/-ausgabestrom in einer Variablen speichern, was praktisch ist, wenn z.B. im ganzen Programm entweder von der Standardeingabe liest oder doch aus einer Datei die Daten liest, dann hat man einen Zeiger dem zu Programmbeginn entweder die Adresse von stdin oder von der Datei zugewiesen wird.

    Code-Hacker



  • RHBaum schrieb:

    Du hasst Objecte err

    Warum denn das? Die haben dir doch nix getan 😃 😉

    Ansonsten: Der tiefere Sinn von Zeigern wird sich dir mit der Zeit automatisch erschließen.

    Hier noch ein gutes Tut:
    http://www.exonet.de/exonet.php3?doc=ctutorial/pointers.html



  • bin neu hier... aber ihr habt da was seeeeehr maechtiges vergessen

    D I E
    ueberladung oder............................... zum beispiel



  • Lis schrieb:

    bin neu hier... aber ihr habt da was seeeeehr maechtiges vergessen

    D I E
    ueberladung oder............................... zum beispiel

    Tut mir leid, aber ich verstehe nicht, was du damit sagen willst.



  • Lis hat sich im forum versehen...

    ich denke, hier wurde polymorphie angedeutet, wobei ich das nicht unbedingt zum thema "wozu zeiger" hinzufügen würde.. vor allem natürlich nicht in ansi c 😉



  • In jedem Falle haben Zeiger nichts mit Ueberladung zu tun 🙂


Anmelden zum Antworten