2017-10-24 2 views
-2

Während ein Tutorial gerade die Lautsprecher verwendetC++ Array-Deklaration und Initialisierung

int deca['f' + '9' + 2 ] = {0};

Ich habe noch nie diese auf einem anderen C++ Tutorial gesehen und sie nicht erklären, was es bedeutete, und als ich versuchte, Implementieren Sie es auf meinem Computer einen Fehler angezeigt.

Als Referenz waren sie in einer Linux-Umgebung.

+5

Was ist der Fehler, der angezeigt wurde? – DeiDei

+3

können Sie die Referenz des Tutorials teilen? –

+3

Welchen Fehler haben Sie bekommen? [Funktioniert ganz gut hier] (http://coliru.stacked-crooked.com/a/9e0ce8ccd400fc76) – NathanOliver

Antwort

2

Er deklariert einfach ein Integer-Array von N Elementen und initialisiert es auf Null. Was N auswertet, wird durch den Ausdruck 'f' + '9' + 2 bestimmt. Es wird 161 ausgewertet, wenn Sie eine ASCII-Codepage oder etwas anderes verwenden, wenn Sie eine andere Codepage verwenden. Jedes Zeichenliteral hat seinen entsprechenden Integralwert abhängig von der verwendeten Codierung. In der ASCII-Codepage wird das Zeichen 'f' durch eine Nummer 102 dargestellt und das Zeichen '9' hat den Wert 57. Der Ausdruck wird 102 + 57 + 2, was 161 entspricht. In anderen Codepages können diese Zeichen andere Werte haben. Äquivalent von:

int deca[161] = { 0 }; // If ASCII code page is used 
+1

Das ist nur wahr, wenn Ihr System ASCII verwendet, was nicht garantiert ist [siehe verwandte Frage] (https://stackoverflow.com/questions/29381067/does-c-and-c-guarantee-the-ascii-of-af- und-af-Zeichen) – Borgleader

+1

@Borgleader In der Tat. Die Antwort wurde aktualisiert. – Ron

+0

Ich denke du meinst _encoding_, nicht _code page_. Diese beiden Begriffe bedeuten unterschiedliche Dinge. Z. B. muss eine Maschine _Code-Seiten _ nicht unterstützen, um eine _ Codierung zu haben. –