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://cdecl.org/ schrieb:
char arr[]; declare arr as array of char
char **arr; declare arr as pointer to pointer to chararr[] 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-ArrayFü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 Adressendirkb 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