Was ist der Unterschied zwischen "char * A []" und "char ** A" in C-Sprache?


Antwort 1:

char * a [] ist ein Array von Zeigern für Variablen vom Typ char, wohingegen char ** a einen Zeiger auf eine Zeigervariable vom Typ char definiert.

für zB

char c = 'a'; // Wert von c = 2

char * p = & c;

// Zeiger p zeigt auf Variable c

char ** pp = & p;

// pp zeigt auf den Zeiger p, der auf die Variable c zeigt

Weitere Informationen finden Sie unter URL: http: //www.thegeekstuff.com/2012 ...


Antwort 2:

char * A [] ist ein Array und char ** A ist ein Zeiger. In C sind Array und Zeiger häufig austauschbar, es gibt jedoch einige Unterschiede:

1. Mit "char * A []" können Sie A keinen Wert zuweisen, sondern nur A [x].

Mit "char ** A" können Sie auch A und A [x] einen Wert zuweisen.

2. Mit "char * A []" können Sie ein Array initialisieren (z. B. char * A [] = {"foo", "bar"};) und mit sizeof (A) die Größe (auf 64-Bit) ermitteln machine, im obigen Beispiel erhalten Sie 16, da es sich um ein Array mit zwei Zeichen handelt *);

Bei "char ** A" gibt sizeof (A) immer die Größe eines Zeigers zurück (auf 64-Bit-Computern 8).


Antwort 3:
  1. char * A [] bedeutet "ein Array von Zeigern auf Zeichen", wohingegen char ** A "ein Zeiger auf einen Zeiger auf ein Zeichen" bedeutet. Beachten Sie, dass Sie im ersten Fall ausdrücklich darauf hingewiesen werden, dass wir mit einem Array arbeiten, während im zweiten Fall keine solche Garantie gegeben ist. Konstruktionsbedingt entsprechen beide jedoch C, da ein Array als Zeiger auf das erste Element in diesem Array gespeichert ist. Ein Array von Zeigern ist eine spezielle Instanz eines Zeigers auf einen Zeiger. Ein Zeiger auf einen Zeiger ist nicht unbedingt ein Array von Zeigern. Um dies zu demonstrieren, beachten Sie, dass Sie für ein Zeigerarray arrp char ** A = (char **) (void *) arrp zuweisen können, aber Sie können nicht char * A [] = ( char * []) ​​(void * []) ​​arrp; - Tatsächlich können Sie keine Instanzen und Arrays erstellen, ohne ein Längenargument anzugeben, und Sie können auch keine Arrays erstellen, sondern nur Zeiger

Antwort 4:

Erstens ist es ein Zeiger [1] auf das erste Element (auch Array genannt), zweitens kann es sich beispielsweise um den Zeigertyp eines Arrays von Zeichenfolgen [2] handeln.

Mit anderen Worten, Arrays zerfallen ohnehin in Zeiger und sind daher nur ein syntaktischer Zucker (solange Sie die Anforderungen der Größenzuweisung bei Arrays übersehen).

[1] Im Gegensatz zu int * ist char * ein universeller Zeigertyp.

[1] Strings werden selbst als nullterminierte Arrays herumgereicht.

Weitere Beispiele finden Sie unter

Ken Greggs Antwort auf Wann sollte ich im C-Hauptprogramm doppelte Zeiger als Argument definieren?

Sergey Zubkovs Antwort auf Sind Arrays von Arrays in C möglich?

John L. Millers Antwort auf Sind Arrays von Arrays in C möglich?