在下面这段代码中静态的作用是什么?

时间:2017-12-12 17:21:02

标签: c

如果我删除这个'静态'那么没有什么会打印出来的原因是什么?

#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);
}

1 个答案:

答案 0 :(得分:3)

不要理解未定义的行为。如果没有static,则它是您从函数返回的局部变量的地址。在生命周期结束时访问局部变量会导致未定义的行为。它可能会给你正确的结果,下次它可能会爆炸。它是未定义的行为。

对于static,变量的生命周期超出了函数的范围。然后你可以返回它的地址并在函数外部访问它,因为生命时间现在不依赖于被调用的函数。