次のコードで2つの関数を記述しました。どちらも同じ出力を生成することを目的としています。しかし、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()