2017-10-24 3 views
0

Ich bin ziemlich neu in C und bin gerade erst auf Compound Literals gestoßen. Bitte korrigieren Sie mich, wenn meine Frage nicht korrekt ist.Initialize Variable Inside Composite Literal

Ich habe eine Struktur;

typedef struct 
{ 
    int someVal; 
} foo; 

Jetzt verstehe ich, dass dies mit dem folgenden initialisiert werden könnte.

int main() 
{ 
    foo thisFoo = (foo) { .someVal = 2 }; 
} 

Meine Frage ist, konnte ich initialisieren someVal mit einer Leeren Funktion?

void init(int *f); 

int main() 
{ 
    foo thisFoo = (foo) { init(.someVal) }; // error: expected expression before '.' token 
} 

void init(int *f) 
{ 
    *f = 2; 
} 

Ich habe es geschafft, die Struktur selbst und ihre jeweiligen Elemente in einer Funktion ohne Probleme zu initialisieren aber war neugierig, ob dies eine Alternative (oder sogar vernünftig) Wahl ist?

+0

'foo thisFoo; init (& thisFoo.someVal); '...' void init (int * f) { * f = 2; } ' – BLUEPIXY

+0

@BLUEPIXY Ich glaube nicht, dass er will, dass die Funktion über die Struktur weiß. – Barmar

+0

@Barmar sicher, ich modifizierte coment. – BLUEPIXY

Antwort

0

Nein, Sie können nicht so initialisieren. Sie können die Struktur ohne Initialisierung erstellen und dann die Funktion mit der Adresse des Mitglieds aufrufen.

foo thisFoo; 
init(&thisFoo.someVal); 
+0

Ich schätze es, ich dachte mir, es könnte eine dumme Frage gewesen sein :) – Drewzillawood