2017-10-24 11 views
0

저는 C에 대해 처음 접했고 단지 Compound Literals를 발견했을 뿐이므로 제 질문이 정확하지 않으면 제게 올바른 말을하십시오.Compound Literal 안의 변수 초기화하기

구조체가 있습니다.

typedef struct 
{ 
    int someVal; 
} foo; 

이제이 내용을 다음으로 초기화 할 수 있음을 이해합니다.

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

제 질문은 무효 기능으로 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 확실하게, 나는 수정했다. – BLUEPIXY

답변

0

아니요, 초기화 할 수 없습니다. 초기화없이 구조체를 생성 한 다음 멤버의 주소로 함수를 호출 할 수 있습니다.

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

나는 그것을 바란다, 나는 어리석은 질문 이었을지도 모른다라고 상상했다 :) – Drewzillawood