2016-04-22 10 views
9

In C, warum kann ich nicht tun:Warum kann ich keine konstanten Arrays als Argumente übergeben?

arrayfn({1.0, 2.0, 3.0}); 

wenn arrayfn eine Funktion ist, die double[] oder double* je nachdem, was in einem Parameter des Typs nimmt. Wenn ich das versuche, bekomme ich einen Syntaxfehler.

Gibt es einen Weg, wie ich etwas in C erreichen könnte - das Generieren und sofortige Übergeben eines zur Kompilierungszeit bekannten Arrays -, das vermeidet, dass eine Codezeile vordefiniert und gefüllt wird?

+5

Sie können ein zusammengesetztes Literal verwenden. –

+1

gute Antwort; Ich habe es versucht; Es klappt; Wir sind fertig –

+3

Wir sind nicht fertig, bis Sie eine Antwort akzeptieren. – Almo

Antwort

9

Kurze Antwort: Sie müssen eine compound literal verwenden. Etwas wie

arrayfn((double[]) {1.0, 2.0, 3.0}); 

sollte den Job erledigen.


Einige Erklärung

zum Teil kommend, warum arrayfn({1.0, 2.0, 3.0}); nicht funktioniert, weil, ohne die Syntax für die Verbindung Literalen {1.0, 2.0, 3.0} eine Klammer umschlossen Initialisiererliste ist. Es bezeichnet kein "Objekt", das als Funktionsargument verwendet werden kann. Sie sind nicht"konstante Arrays", wie Sie vielleicht gedacht haben.

Um mehr Informationen unter Angabe C11, Kapitel §6.5.2.5, Verbindung Literale

Ein Postfix-Ausdruck hinzuzufügen, ist durch eine Klammer geschlossene Liste der initializers gefolgt von einem geklammerten Typ Name besteht ein zusammengesetztes Literal. Es stellt ein unbenanntes Objekt bereit, dessen Wert von der Initialisierungsliste angegeben wird.

+0

Danke! Es klappt. Etwas merkwürdig, dass mein unmittelbarer Impuls war, '(double *) {1.0, 2.0, 3.0}' zu laufen, was nicht das tat, was ich wollte - aber nahe genug! –

+2

'const double []' – user3528438