Pointer auf Char



  • Ist array(arr[]) und Zeiger auf Zeiger(**arr) nicht dasselbe?



  • Bitte nochmal verständlich.

    Falls du nur die Bezeichner in den Klammern meinst: Nein, das ist nicht dasselbe.



  • Was ist der Unterschied zwischen **char arr; und char arr[]; ?



  • Das eine ist ein Zeiger, also eine Adresse von was, und das andere ist ein Array, also eine Aufreihung gleichartiger Objekte. Völlig verschiedene Sachen.



  • Ja, stimmt, Zeiger und Arrays sind wirklich ziemlich unterschiedlich. Hier ist eine gut verständliche Seite mit Fragen und Antworten zu dem Thema. Das ist auch für Nichtakademiker leichte Kost.

    http://c-faq.com/~scs/cgi-bin/faqcat.cgi?sec=aryptr



  • http://cdecl.org/ schrieb:

    char arr[]; declare arr as array of char
    char **arr; declare arr as pointer to pointer to char

    arr[] als Variablendefinition:
    Bei arr[] reicht einmal dereferenziern aus, um auf ein char zu kommen.
    Es ist ein 1D-Array
    Das kann mit Arrayzugriff oder mit dem * sein. (arr[0] oder *arr)
    Du kannst arr nicht verändern (arr++ geht nicht). Es ist kein Pointer.
    sizeof() liefer die Größe des Arrays in Byte.

    arr[] in der Parameterliste einer Funktion:
    Es wird zu *arr. Also einem Pointer
    Einmal dereferenzieren.

    Bei arr musst du zweimal dereferenziern aus, um auf ein char zu kommen.
    Es ist ein Pointer.
    Du kannst das char
    als Zeiger auf char[] benutzen.
    Es ist kein Zeiger auf ein echtes 2D-Array

    Für Pointer gilt:
    Du kannst arr verändern (z.B. arr++ )
    Derefernzieren kann mit Arrayzugriff [] oder mit dem Operator * sein.
    sizeof() liefert die Größe des Zeigers in Byte
    Du kannst (mit arr) keine Ausssage über die Größe des Blocks treffen auf den arr zeigt.



  • is schon nich wirklich einfach 😞

    eine einfache hoffentlich letzte frage noch.

    ein array mit z.b. "ABC" würde ja bedeuten, dass
    buchstabe A im array[0]
    buchstabe B im array[1]
    und buchstabe C im array[2] steht.

    wenn ich einen pointer erstelle, wie im folgenden beispiel:

    char array[] = "ABC";
    char *pointer;
    pointer = array; //oder: pointer = &array[0];
    pointer = "neu";
    

    dann will ich aber mein array[1] wo "B" drin steht, auf z.b. "neu" ändern (können).

    DirkB schrieb:

    Bei pointer = "neu"; weist du pointer die Adresse von dem Stringliteral zu. Das steht irgendwo im Speicher. Darum hast du bei %p auch andere Adressen

    dirkb meinte ja das dann im pointer irgendeine speicheradresse steht, wo wiederum "neu" drin steht. ich will aber das "neu" im array[1] steht und nicht irgendwo. geht das dann nicht irgendwie mit hilfe eines pointers? 😕



  • ok das war fail. ich sollte doch öfters eine pause machen 😃
    ist natürlich klar, dass ich kein string in einzelnes char array speichern kann.

    ich kann natürlich mit dem dereferenzierungsoperator einen buchstaben ins array speichern/überschreiben. aber strings gehen ja schlecht in ein einzelnes array 😃

    sry!



  • "neu" besteht aus 4 Zeichen (3 Buchstaben + '\0')
    array[1] ist ein char und bietet Platz für ein Zeichen.

    Wie soll da das Ergebnis aussehen?



  • Dein Antwort habe ich gerade beim schreiben nicht mehr gesehen.



  • kein problem! wie gesagt: muss mal frische luft schnappen gehen 😃

    danke aber vielmals für die antworten


Anmelden zum Antworten