2016-08-26 2 views
1

ich auf einer Webseite gesehen haben, dass wir dies tun könnte:ein Array von int vergeben (nur ein Element) auf eine ganze Zahl in c

int k = {5}; 

Wenn ich es selbst versuchen, fand ich, dass dies funktioniert in C-Programmierung und der Wert k ist 5.

  • q1: Warum könnten wir einer Variablen vom Integer-Typ ein Integer-Array (auch wenn es nur ein Element gibt) zuweisen, sollten da nicht ein paar Fehler sein?
  • q2: Wofür wird diese Art von Zuweisung verwendet? (In welcher Situation und warum wir sie verwenden oder vielleicht werden wir sie nicht mehr benutzen?)
  • +0

    Warum denken Sie, '{5}' ist ein Array aus einem Element? Warum kann es nicht eine Strukturkopie von nur einem Element gleich fünf sein? Der Grund dafür ist historisch. Es wurde vom Compiler von K & R erlaubt. –

    +0

    Das ist übrigens keine Art von Aufgabe. Es ist ** eine Deklaration mit einem Initialisierer **. –

    Antwort

    4

    Es gibt kein Array, die C-Syntax erlaubt dies einfach. Beide sind äquivalent:

    int k = 5; 
    int k = {5}; 
    

    Wie für die Initialisierung in den Syntaxregeln gesehen ,
    Initialisierer kann eine Zuweisung-Ausdruck sein, der entspricht:

    int k = 5; 
    

    der Initialisierer kann auch eine {Initialisierungsliste} sein, die ein Initialisierer sein kann, der ein Zuweisungsausdruck sein kann:


    (Zitat von ISO/IEC 9899: 201x 6.7.9 Initialisierung Syntax 1.)
    Initialisierer:
            Zuweisungsausdruck
            {Initialisierer-Liste}
            {Initialisierungsliste,}

    Initialisierer-Liste:
            Bezeichnung opt initializer
            Initialisierer-Liste Bezeichnung opt initializer

    3

    int k = {5}; eine völlig legale Art und Weise ist eine skalare zu initialisieren, obwohl es wirklich nicht Ihren auszudrücken Absicht sehr gut. Aus diesem Grund könnte ein guter Compiler Sie warnen.

    Aber beachten Sie, dass Klammer Initialisierung {0} idiomatische ist. (Obwohl ich in C++ bevorzuge, verwende ich {}).

    +0

    Aber ich habe 'gcc' mit der Option' -Wall' verwendet, aber es gibt keine Warnungen. – SWIIWII

    +0

    Hum, es hat dich bestimmt * benutzt * um dich zu warnen.Ich frage mich, ob sie die Warnung ausgeschaltet haben, weil sich zu viele Leute darüber beschwert haben, dass sie vor '{0}' warnen! – Bathsheba

    +0

    @Bathsheba Warum sollte es warnen, wenn es perfekt definiert ist? Vielleicht haben Sie einen C++ - Compiler oder einige obskure Flags verwendet? – 2501

    Verwandte Themen