我有以下代码,其中我编写了两个函数。两者都旨在产生相同的输出。但是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()
?