如果我删除这个'静态'那么没有什么会打印出来的原因是什么?
#include<stdio.h>
int *fun();
int main()
{
int *p;
p=fun();
printf("Address=%u\n",p);
printf("Value at that address=%d\n",*p);
return 0;
}
int *fun()
{
static int i=1;
return (&i);
}
答案 0 :(得分:3)
不要理解未定义的行为。如果没有static
,则它是您从函数返回的局部变量的地址。在生命周期结束时访问局部变量会导致未定义的行为。它可能会给你正确的结果,下次它可能会爆炸。它是未定义的行为。
对于static
,变量的生命周期超出了函数的范围。然后你可以返回它的地址并在函数外部访问它,因为生命时间现在不依赖于被调用的函数。