Literales Array in C [duplicate]

Lesezeit: 2 Minuten

Ich kann mich in meiner Definition dessen, was ein Literal-Array ist, irren. Ich beziehe mich auf Folgendes als eines:

{0x00, 0x01, 0x03}

Ich habe eine Funktion, die ein Array akzeptiert, wie unten gezeigt:

void mote(char arry[]){}

Wenn ich diese Funktion aufrufe, möchte ich Folgendes tun können:

mote({0x00, 0x01, 0x03})

Mein Compiler (C30) beschwert sich jedoch mit folgendem Fehler:

error: syntax error before '{' token

Ich habe das obige auch mit diesen Klammern versucht -> [ ] aber ich bekomme immer noch den gleichen Fehler.

Meine Fragen

1) Ist es möglich, ein Literal-Array an eine Funktion zu übergeben?

2) Wenn ja, wie?

Vielen Dank im Voraus

  • Ja, das ist eine ähnliche Frage, danke

    Benutzer1167219

    19. April 2013 um 12:59 Uhr

Benutzer-Avatar
md5

Diese Syntax heißt Array-Initialisierer. Daher kann es nur verwendet werden, wenn Sie Ihr Array definieren.

C11 (n1570), § 6.7.9 Initialisierung

initializer:
    assignment-expression
    { initializer-list }
    { initializer-list , }

In C99 ist dies jedoch möglich zusammengesetzte Literale:

mote((char[]){0x00, 0x01, 0x03});

  • Hinweis: Wenn die Funktion übernommen werden kann const char arry[] (Wahrscheinlich, da die bloße Tatsache, ein zusammengesetztes Literal zu übergeben, impliziert, dass der Aufrufer das Ergebnis nicht benötigt, sollte es also möglich sein, es zu erstellen, es sei denn, die Funktion verwendet es als Arbeitsspeicher const), Vorbeigehen (const char[]){0x00, 0x01, 0x03} ermöglicht dem Compiler, statischen Speicher (in den Konstantenabschnitt der Binärdatei eingebacken) zu verwenden, der mit Zeichenfolgenliteralen geteilt wird; ohne das const (und bei Compilern, die keine String-Literale zusammenführen), würde das Literal außerhalb des globalen Gültigkeitsbereichs bei jeder Verwendung rekonstruiert (es hat nur eine automatische Speicherdauer).

    – ShadowRanger

    31. Januar 2020 um 17:35 Uhr


Wenn C99 nicht unterstützt wird, versuchen Sie Folgendes:

char cp[] = {0x01, 0x02, 0x03};
mote (cp);

1179740cookie-checkLiterales Array in C [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy