2017-10-24 3 views
0

私はC言語ではかなり新しく、コンパウンドリテラルに遭遇したばかりなので、質問が不正確であれば修正してください。コンパイルリテラル内の変数を初期化する

私は構造体を持っています。

typedef struct 
{ 
    int someVal; 
} foo; 

ここでは、これを次のように初期化することができます。

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

私の質問は、私はvoid関数でsomeValを初期化することができ、ありますか?

void init(int *f); 

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

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

私は何の問題もなく、関数内で構造体自体とそのそれぞれのメンバーを初期化するために管理しますが、これは、代替(あるいは合理的)である場合には興味があった選択しましたか?

+0

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

+0

@BLUEPIXY彼は機能について構造を知りたいとは思っていません。 – Barmar

+0

@Barmar確かに、私はcomentを変更しました。 – BLUEPIXY

答えて

0

いいえ、あなたはそのように初期化することはできません。初期化せずに構造体を作成し、そのメンバのアドレスで関数を呼び出すことができます。

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

私はそれを感謝します、私はそれが愚かな質問だったかもしれないと思った:) – Drewzillawood