Ich denke, die Verwirrung hier stammt aus der Überzeugung, dass {"Hey","Hello"}
ein Array ist. Es ist nicht. Es ist überhaupt kein Objekt. Es ist nur eine spezielle Initialisierungssyntax, die zum Initialisieren eines Arrays verwendet werden kann. Sie können es nicht verwenden, um ein char**
zu initialisieren, da ein char**
ein Zeiger und kein Array ist. Es erstellt nicht automatisch ein Array-Objekt, das Sie in einen Zeiger konvertieren können.
Vielleicht haben Sie daran gedacht wie eine [...]
Liste in Python oder ein { ... }
Objekt in JavaScript. Es ist überhaupt nicht wie diese. Diese Ausdrücke erzeugen tatsächlich Objekte dieses Typs und können überall in einem Ausdruck verwendet werden, der diese Objekte aufnehmen kann.Die Syntax, die wir in C++ verwenden, ist nur eine Initialisierungssyntax.
Zum Beispiel Sie könnte dies tun:
const char* array[] = {"Hey","Hello"};
const char** p = array;
Sie können jedoch nicht etwas Dummes tun, wie folgt:
std::cout << {"Hey", "Hello"}[1];
Hier haben wir tatsächlich das Array-Objekt erstellt, in dem die Zeiger werden gespeichert. Nur dann können wir dieses Array in eine const char**
konvertieren.
Zeiger sind keine Arrays. –