다음 코드는 두 가지 기능을 썼습니다. 두 가지 모두 동일한 출력을 생성하기위한 것입니다. 그러나 루프가있는 함수 g()
은 아래에 표시된 것으로 예상했던 것과 다른 출력을 생성합니다.복합 리터럴은이 코드에서 어떻게 작동합니까?
#include <stdio.h>
struct S { int i; };
void f(void)
{
struct S *p;
int i = 0;
p = &((struct S) {i});
printf("%p\n", p);
i++;
p = &((struct S) {i});
printf("%p\n", p);
}
void g(void)
{
struct S *p;
for (int i = 0; i < 2; i++)
{
p = &((struct S) {i});
printf("%p\n", p);
}
}
int main()
{
printf("Calling function f()\n");
f();
printf("\nCalling function g()\n");
g();
}
출력 :
Calling function f()
0023ff20
0023ff24
Calling function g()
0023ff24
0023ff24
가 어떻게 호출 할 때 p
의 주소 g()
경우에 동일 올?
'struct()'에 대해 두 개의 로컬 스코프에'f()'를 넣으려고했으나 결과가 바뀌지 않았다. 이상하게 보인다. – Jack
감사합니다. 나는'& ((struct S) {i}) '를 정적 저장소 객체와 어떻게 든 혼동합니다. 나는 무슨 일이 일어나고 있는지 보지 못했습니다. – cpx